Wbrew pozorom prace nad angularowym silnikiem gry paragrafowej trwają dalej. W tej chwili dotarłem do momentu, w którym kod idzie w logikę obsługi działania paragrafów niż naukę Angulara. Oczywiście staram się jak mogę wprowadzać rozwiązania angularowe, ale nie oszukując - nie da się wszystkiego napisać tak, aby powstało tylko na angularowy sposób.
W tej chwili próbuje nauczyć się jak wygenerować modalne okienko potrzebne do wyświetlania stanu ekwipunku postaci. Już sprawiło mi to sporo kłopotów i ... nadal nie działa.Kolejny element framweworka jaki chce zastosować to fabryki do tworzenia źródła danych (teraz tworzonego statycznie w jednym z plików) oraz niemal najważniejszy element Angulara czyli dyrektywy. Tylko co ja tą dyrektywą będę robił to nie wiem :).
Takie podejście to trochę przerost formy nad treścią jednak bez użyci możliwie dużej ilości wbudowanych elementów frameworka nie da się go nauczyć na trochę bardziej niż podstawowym poziomie.
Sam silnik w międzyczasie od ostatniego wpisu otrzymał kilka nowych funkcjonalności. W tym:
- testy warunkowe
- testy kumulatywne
- zbieranie przedmiotów po testach i po walce (przykład na zrzutach)
Przed walką Po walce - sprawdzenie czy postać posiada przedmiot potrzebny do przejścia paragrafu
- zapis historii poruszania się po paragrafach
- kilka poprawek blokujących wyświetlanie paragrafów
- dużo innych drobnych poprawek
Pojawił się już efekt kuli śnieżnej - drobna zmiana w miejscu X powoduje ZŹŻ zmian w 3 innych miejscach. Powoduje to standardowe zamieszanie - rzeczy które działały tydzień wcześniej nie działają dzisiaj.
Poważnie rozrosła się definicja pojedynczego paragrafu. Pierwotnie był tekst paragrafu plus linki przekierowań. Wraz z dodawaniem nowych funkcjonalności poziom komplikacji zmienił się i trzeba pamiętać o nowo dodanych rzeczach oraz o tym jak wpłyną na to co już jest napisane.
Poniżej przykłady jak wygląda definicja paragrafu w zależności od tego jak dużo operacji udostępnia.
Definicja zwykłego paragrafu z jednym przekierowaniem
new Paragraf({ number: 2, text: '<p>Zajmujesz miejsce woźnicy. Brama otwiera się jak tyko do niej podjeżdżasz</p>', exits: [new Redirect({ target: 30, text: '<p><a class="more-link" href="#/paragraf/30">Na dziedzińcu strażnicy podchodzą do Ciebie</a></p>' })], enemy: [], tests: [], treasure: [] }),
A tutaj mamy definicję paragrafu z wrogiem i możliwością zdobycia - po walce - przedmiotu, miecza do rąk dwóch. Oczywiście obiekt mieczDwureczny jest odpowiednio budowany wcześniej:
new Paragraf({ number: 142, text: '<p>Paragraf na potrzeby podniesienia przedmiotu po walce</p>', exits: [ new Redirect({ target: 144, text: '<p><a class="more-link" href="#/paragraf/144">Pokonałeś wroga</a></p>', type: FIGHT_WON }), new Redirect({ target: 144, text: '<p><a class="more-link" href="#/paragraf/144">Poległeś</a></p>', type: FIGHT_FAILED }) ], enemy: [new Enemy({name: 'Czarodziej', hp: 1, deffence: 1, proffesion: MAGE, special: [], status: 1})], tests: [], treasure: [mieczDwureczny] }),
O i definicja miecza:
var mieczDwureczny = new Treasure({ id: 2, name:'Miecz dwuręczny', bonus:2, bonusType:'SF', diceType:'DYNAMIC_MD' });
Tu zaś mamy definicję paragrafu z testem kumulatywnym. Sama definicja testu jest już skomplikowana...
new Paragraf({ number: 139, text: '<img src="img/swiatynia_wejscie.png" style="width: 50%;height: auto; float: right; margin: 0 0 10px 10px;"/> ' + 'Test KUMULATYWNY (charyzmy) CH: 4(5)', exits: [ new Redirect({target: 144, text: '<p><a class="more-link" href="#/paragraf/144">Wyjscie jakie pojawi się ponizej 4 rund UDANE </a></p>'}), new Redirect({target: 144, text: '<p><a class="more-link" href="#/paragraf/144">Wyjscie jakie pojawi się przy 4 rundach UDANE </a></p>'}), new Redirect({target: 144, text: '<p><a class="more-link" href="#/paragraf/144">Wyjscie jakie pojawi się przy 5 próbach UDANE </a></p>'}), new Redirect({target: 144, text: '<p><a class="more-link" href="#/paragraf/144">TEST NIEUDANY PO 5 probach</a></p>'} ) ], enemy: [], tests: [new Test({parameter: CH, difficulty: 4, success: 5, cumulative: true, conditionalExits: ['WON:LT:4', 'WON:EQ:4', 'WON:GT:4', 'FAILED:GT:5']})], treasure: [] }),
I tak dalej. Możliwości jest sporo w efekcie kod szybko puchnie.
Gdzieś przy okazji napisałem parser w javie, który przeniósł poprzednią wersję paragrafówki do wersji angularowej. Można prowadzić walki, przeprowadzać część testów i poruszać się między paragrafami. Dzięki temu zauważyłem też, że konstrukcja niektórych paragrafów stanowi poważny problem dla aktualnej wersji silnika.
Wygląda tak i jest w pełni grywalna (nie licząc problematycznych paragrafów)
Cyferki na górze ekranu to paragrafy, które minął bohater zanim dotarł do paragrafu 23.
Tutaj przykład testu kumulatywnego i jego efekt:
i da się dojść do końca gry. Log paragrafów pokazuje co się działo po drodze :)
Mimo wszelkich problemów jadę z kodem dalej.
p.s.
Kod javascript generowany z hilite.me
Brak komentarzy:
Prześlij komentarz
Tu możesz wstawić swój komentarz