Djinni Wiki PL
Advertisement

Przedstawię tutaj ciekawy sposób na wyłapanie wszelkich możliwych zgrzytów i niedociągnięć w zaplanowanym biegu wydarzeń w naszych scenariuszach. Napisać scenariusz liniowy to nie problem, lecz naszym zadaniem jest przecież tworzyć przygody możliwie rozwinięte i dające jak najwięcej możliwości wyboru, a zarazem nie dopuszczając, by gracz się "zatkał".

Moja propozycja brzmi: zastosować do scenariusza... modelowanie przy pomocy tzw. sieci Petriego. Nie, nie, darujcie sobie google i wiki, bo tam Was tylko nastraszą, że taka sieć to zbiór par połączeń między elementami dwu zbiorów, z czego każde połączenie... itd itd, kupa teorii, tym razem do niczego nam niepotrzebna. Szczególnie, że tę sieć zmodyfikujemy.

Na początek wyobraźmy sobie prosty scenariusz: Geralt spotyka Maryśkę, od której ma wydobyć klucz do wychodka. Może ją o to ładnie poprosić - a dziewczyna uparta, więc trochę się nabiedzi - a może na nią nakrzyczeć, wtedy się rozpłacze i klucz da ze strachu. Następnie jeżeli ma klucz, może do wychodka wpuścić cierpiącego na nagły atak niestrawności Jasia, który już długo nie wytrzyma, albo Kazia, który za ostatnią wizytą coś upuścił do klozetu i chce próbować to wyłowić, wędką dziadka, zanim ktoś na to narobi. W tym ostatnim przypadku możemy dokonać małego cudu "wilk syty i owca cała", podając Jasiowi lekarstwo - jednak lekarstwo możemy dostać tylko od Marysi, i tylko gdy na początku na nią nie nawrzeszczeliśmy. Oprócz tego z wychodka korzystać może jeszcze babcia Gienia, ale ona ma własny klucz, którego nie odda nijak.

Wszystko wydaje się spójne i logiczne, w naturalnym języku spisane. Dla mechaniki gry, oczywiście, nic tak proste nie jest - i nagle musimy zacząć dbać choćby o to, by nie wpuszczać nikogo do klozetu dwa razy (bo po co, skoro już raz był) ani dwukrotnie nie męczyć Marysi o klucz, gdy już go (jakoś) oddała. Co jednak z babcią Gienią, i co z efektami niestrawności, gdy Jasia do klopa nie wpuścimy?

I tu właśnie można to robić "z głowy", a można posłużyć się wspomnianą siecią. Do roboty.

Zacznijmy od paru definicji - mamy stany, akcje przechodzące między nimi, wymagania by akcje mogły zajść, efekty akcji, i kupę kolorowych żetonów. Owszem, zaraz nasz scenariusz zacznie przypominać rekwizyty do jakiejś głupawej gry planszowej.

Oto elementy, jakimi (między innymi) będziemy się posługiwać: http://img149.imageshack.us/img149/4037/petridrzwinh2.gif

Elipsy - to stany.
Każdemu nadajemy nazwę określającą jakiś chwilowy stan rzeczy - "obrazek wisi na ścianie", "mamy cukierek w kieszeni", "babcia jedzie autobusem", unikamy zaś mylących skrótów - "trąbka", "jedzenie". Ostatecznie zaznaczamy, ile żetonów ma na sobie na starcie - w naszym przypadku żeton jest tylko jeden na stanie "drzwi zamknięte". Żeton obecny w danym stanie oznacza, że ten stan jest w danym momencie prawdziwy.
Prostokąty - to akcje.
Nadajemy im nazwy oznaczające jakąś czynność - "zdejmujemy obrazek", "wyjmujemy cukierek", "babcia wysiada z autobusu". Definiują one, co może się stać w jakimś przypadku.
Strzałki prowadzące od stanu do akcji - to opcjonalne warunki
Może ich być po kilka do każdej akcji, a może nie być żadnego - wtedy akcja może zostać wykonana kiedykolwiek. Jeśli jednak jakieś strzałki warunków mamy, to akcja będzie mogła zostać wykonana wyłącznie wtedy, gdy w każdym ze stanów będzie przynajmniej jeden żeton. Nie ma żetonu - nie ma akcji.
Strzałki wiodące od akcji do stanów - to efekty
Określają one wyniki danego działania - czyli gdzie umieścimy żetony w momencie wykonania akcji.

Spójrzmy jeszcze raz na nasz diagram powyżej. Stan początkowy, gdy stoimy przed drzwiami, jest taki, że drzwi są zamknięte. Akcja "otwieramy drzwi" może zostać wykonana, gdyż w stanie "zamknięte" jest żeton - natomiast akcja "zamykamy" nie może, gdyż nie ma żetonu w stanie "otwarte". Dla człowieka to logiczne do stopnia banału, dla mechaniki gry - dopiero staje się zrozumiałe. Uwaga zatem - otwieramy drzwi! Strzałka wiedzie z pola "drzwi zamknięte", zatem zabieramy stamtąd żeton, a prowadzi do pola "drzwi otwarte", zatem umieszczamy tam żeton. Voila, drzwi otwarte, każdy widzi: stoi żeton w polu "otwarte".

Rozszerzmy zatem nasz pomysł:

http://img71.imageshack.us/img71/7596/petridrzwi2nu1.gif

Teraz do otwierania drzwi potrzebujemy śrubokręta. Na górze mamy nową akcję: kupno śrubokrętów - i to całym kompletem, więc nad strzałką pojawiła się cyfra 5. Wykonać tę akcję możemy w dowolnym momencie, co spowoduje dodanie pięciu żetonów-śrubokrętów do stanu "mamy śrubokręt". Możemy też wyrzucić jeden śrubokręt - jeżeli jakiś mamy, to akcja "wyrzucamy" zabierze nam jeden śrubokręt i nie da nic w zamian. Akcja "otwieramy drzwi" zaś dorobiła się linii przerywanej na warunku posiadania śrubokręta - oznacza ona, że śrubokręta nie niszczymy na drzwiach: ważne, byśmy jakiś mieli, bo inaczej nie otworzymy drzwi, ale jak już je otwieramy, to śrubokręt się nie uszkadza, i jak mieliśmy ich sześć sztuk, tak nadal mamy sześć.

Ważna uwaga! To nie my decydujemy o kolejności wykonywania akcji, tylko gracz. A gracz może okazać się sensownym pogromcą przeciwności losu... albo debilem. Debilem, który akcję "kupuję śrubokręt" wykona miliard razy, tylko dlatego, że mu wolno. Wszystkie takie sytuacje trzeba koniecznie wyeliminować - choćby dodać jakiś limit pojemności kieszeni.

Tu wchodzi już nasza kreatywność. Mechanizm można rozszerzać o dowolne własne elementy - o ile zachowuje się podstawę: ze stanów ciągniemy warunki do akcji, a z akcji prowadzimy efekty do stanów. Nigdy nie łączymy bezpośrednio stanów ani bezpośrednio akcji. Poza tym wolna droga: możemy tworzyć specyficzne warunki (ale każdy musi dotyczyć tylko jednego stanu, z którego wychodzi), możemy zmieniać czy nawet losować ilość żetonów w efektach - do wyboru, do koloru.

  • Możemy dorysować przerywaną strzałkę, prowadzącą ze stanu "mamy śrubokręt" do akcji "kupujemy", dopisując na niej "<20", co umownie oznaczać będzie: wolno kupić narzędzia, jeżeli ma się ich przy sobie mniej niż 20.
  • Na strzałce od "mamy śrubokręt" do "otwieramy drzwi" możemy dopisać coś w stylu "20% że 1 zabieramy", i wtedy z niedużym prawdopodobieństwem śrubokręt nam się złamie.
  • Dla urozmaicenia możemy też pozwolić tylko raz na zakup narzędzi - dodając stan "można kupić narzędzia" z 1 żetonem obok tej akcji, i ciągnąc od tego stanu do akcji strzałkę - wtedy zakup spowoduje zabranie żetonu, czyli anulowanie stanu "można kupić narzędzia", i już się drugi raz zakupów nie zrobi.
  • Bardzo ciekawym rozszerzeniem byłoby np. stworzenie strzałek od wielu stanów do jednej akcji (normalka, zwykle wymaga po prostu by wszystkie w tym momencie były spełnione) ale złączenia ich w jedną i zaznaczenie "suma >=2", by akcja mogła wykonać się już przy dwu stanach aktywnych, nie potrzebując wszystkich (do opisu choćby werdyktu jury, gdzie wygrywamy większością głosów z 3 sędziów).

Pytanie się jednak pojawia: po jakiego grzyba tak to zapisywać? Otóż po pierwsze ma się wyraźnie rozrysowane wszystko co może mieć miejsce w danym scenariuszu, a nie rozsypane po setce plików gdzieś w module od razu. Po drugie - jeżeli stanom nadać jakieś proste etykiety ("drzwi_otwarte"), to są to gotowe flagi globalne dla naszych przygód, akcje zaś - to skrypty zdarzeń rozmaitych.

Ponieważ to technika dość eksperymentalna, komentarze na jej temat mile widziane pod linkiem "dyskusja" na górze.

-- Sinus

Advertisement