Nelderim DevBlog #6

Kolejne dwa tygodnie za nami i dużo się działo przez ten czas!

Prace na migracją w ostatnim czasie wyglądały trochę inaczej, bo nie dotyczyły bezpośrednio serwera, ale po kolei.

Wielka batalia z klientem

Jestesmy na takim etapie, że mniej-więcej wszystko działa, a my powoli szlifujemy świat i mechaniki i dokładamy kolejne cegiełki do naszego projektu.

„Mniej-więcej” jest kluczowe w powyższym zdaniu, ponieważ żeby móc w ogóle zacząć prace oraz móc się upewnić że serwer działa jak należy, poszliśmy na skróty z testowym klientem, i można powiedzieć, że jest zlepkiem plików ze starego i nowego klienta, byleby można było połączyć się z serwerem i testować.

Na wiele rzeczy przymykaliśmy oko, ponieważ nie były one kluczowe, ale nadszedł czas, żeby przygotować gotową paczkę klienta, w której już nie trzeba będzie na nic przymykać oka i budować świat dokładnie taki jaki chcemy 🙂

Już przy pierwszym DevBlogu wspominaliśmy o problemach z mapą na najnowszym kliencie, a problem zamietliśmy pod dywan najzwyczajniej kopiując starą mapę do nowego klienta i było to wystarczające do testów.

Problem z mapą tak na prawdę okazał się problemem ze wszystkimi plikami klienta używającymi nowego formatu UOP, ponieważ nie udało nam się znaleźć żadnego narzędzia, które potrafiło by modyfikować pliki w formacie UOP.

Próbowaliśmy wiele przeróżnych narzędzi, wiele przeróżnych klientów, bo może pliki UOP się różnią zależnie od wersji, przegrzebaliśmy przeróżne fora, strony, discordy i co tylko udało nam się znaleźć i nie udało nam się znaleźć dobrego rozwiązania.

Ilość klientów które próbowaliśmy potrafi przyprawić o zawrót głowy

Padła propozycja, że skoro stary format MUL po prostu działa, to może należy bazować na ostatniej wersji klienta z plikami w tym formacie, ale okazało się, że brakuje tam wielu grafik, animacji, a nawet obsługi niektórych systemów, w tym UO Store o którym pisaliśmy w DevBlog #3

Bardzo nam się nie podobała wizja, że ominęło by nas wiele nowości, które już chwaliliśmy i zapewnialiśmy, że będą, więc poszukiwania trwały dalej.

I nagle uświadomiliśmy sobie, że przecież istnieją serwery, które bazują na względnie nowych klientach i posiadają nieoryginalne mapy oraz grafiki, więc jakoś na pewno się da to zrobić!

A co najlepiej zrobić jak ktoś wie coś czego my potrzebujemy? Zapytać! Tak więc stwierdziliśmy, że nikogo nie będziemy o nic pytać, i użyjemy umiejętności Zaglądanie do plików klienta innych serwerów, bo to akurat każdy serwer udostępnia swoim graczom 🙂

I naszym oczom ukazały się pliki z starego klienta uruchamiane przez nowego klienta, tak więc dokładnie to samo czym jest nasz zlepek plików, znany jako klient testowy 🙂

Pewnie macie teraz wrażenie, że utknęliśmy w punkcie wyjścia, ale tak na prawdę uświadomiliśmy sobie że kilkukrotnie byliśmy bardzo blisko rozwiązania tej zagadki!

Wiemy, że nie istnieje narzędzie potrafiące zapisać pliki w nowym formacie, ale istnieje conajmniej jedno narzędzie, które potrafi odczytać dane w nowym formacie oraz cały zestaw narzędzi potrafiących modyfikować pliki w formacie MUL.

Plan jest prosty: wziąć najnowszego klienta z plikami w starym formacie, wyeksportować wszystkie nowości z najnowszego klienta i dodać je do plików w starym formacie i dopiero na to nałożyć cały nasz custom content.

Brzmi jak bardzo dużo pracy i dokładnie tak jest, bo już na sam research opisany powyżej poświęciliśmy około 20 godzin na przestrzeni kilku dni, nie licząc przerw 😀

Zaczęliśmy od mapy i wzięliśmy naszą główną mapę oraz wszystkie pozostałe oryginalne mapy w najnowszej modyfikowalnej wersji.

Przy okazji odkryliśmy, że nasza mapa jest w baaardzo starym formacie i za pomocą kilku narzędzi jesteśmy w stanie powiększyć ją do nowego rozmiaru i zyskać dzięki temu dodatkowy obszar 1024×4096 kratek na nowe dungeony 🙂

Nowy obszar zaczęliśmy już wykorzystywać, ponieważ przenieśliśmy tam wszystkie nasze dungeony które robiliśmy w wolnych miejscach na innych mapach, jako że nie mieściły się na mapie głównej.

Wszystko po prawej stronie strzalki to nowy obszar

Mapa byłaby w tym momencie gotowa, gdyby nie to, że z oryginalną definicją kolorów świat wyglądał trochę inaczej niż go znacie.

Tasandora – LSD edition

Zaczęliśmy dokładną analizę pliku z definicją kolorów i znaleźliśmy dokładnie 740 kolorów których używamy, a które nie są dostępne w oryginalnym kliencie.

Na szczęście okazało się, że w oryginale znajduje się mniej więcej 830 wolnych miejsc na kolory, więc możemy przenosić kolory i na pewno się ze wszystkim zmieścimy.

Następna analiza polegała na wyznaczeniu których kolorów nie musimy ruszać, ponieważ już znajdują się w wolnych miejscach i odfiltrowaliśmy już tylko 371 sztuk dla których musieliśmy znaleźć nowy dom.

Szybka rozpiska, wszystkim kolorom znaleźliśmy nowe miejsce, i wyznaczyliśmy 15 paczek które umieściliśmy w „dziurach” w oryginalnym kliencie.

W świecie ultimy istnieje wiele narzędzi które potrafią działać cuda, i znaleźliśmy jedno, które potrafi dodawać „hurtowo” zasoby do plików, więc wystarczyło tylko przygotować plik z odpowiednimi instrukcjami i wszystkie nasze kolory były już na swoich docelowych miejscach.

Kolory dostały nowe identyfikatory, ale teraz gra musi wiedzieć, że obiekty na mapie które mają przypisany jeden z naszych kolorów, muszą teraz mieć nowy identyfikator koloru!

Ku naszemu zdziwieniu, jeszcze nikt nie napisał takiego narzędzia, tak więc usiedliśmy do programowania.

35 linii kodu później nasz malutki program powiadomił nas, że zgodnie z naszym życzeniem zamienił kolory dla 1,021,708 obiektów i na szczęście nie musieliśmy tego robić ręcznie 🙂

Przed nami jeszcze dużo pracy, bo teraz serwer musi się dowiedzieć o nowych identyfikatorach kolorów, a ponadto czeka nas podobna przeprawa tylko, że na większą skalę z przenoszeniem grafik, ale o tym i nie tylko kiedy indziej, bo prace nad klientem to nie jedyne o czym chcemy napisać 🙂

Gramy w otwarte karty

Niedługo po udostępnieniu poprzedniego wpisu DevBloga, pojawiła się sugestia na serwerze Discord, że skoro cała nasza praca idzie w kierunku ServUO, to czy możemy udostępnić kod źródłowy obecnego serwera, żeby gracze mogli sami robić poprawki w serwerze, gdy my jesteśmy skupieni na migracji.

I tutaj będziemy szczerzy, planowaliśmy taki ruch od dłuższego czasu, a powyższa sugestia utwierdziła nas, że jest to dobry krok, a do tego jest to odpowiedni moment.

Tak więc z dniem dzisiejszym ogłaszamy, że udostępniamy publicznie kod obecnego serwera!

I kod serwera na nowym silniku też! 😀

Dokładnie tak, z dniem dzisiejszym Nelderim staje się serwerem z otwartym kodem źródłowym i każda osoba posiadająca chęci oraz umiejętności może przyczynić się do jego rozwoju.

Kod źródłowy obu serwerów dostępny jest na naszej organizacji w serwisie GitHub https://github.com/UONelderim

Czy to oznacza, że każdy może coś zmienić w serwerze?
Tak, ale wszystkie zmiany najpierw muszą zostać przez nas zaakceptowane 🙂

Czy to oznacza, że każdy może uruchomić swój Nelderim?
Tak i nie. Udostępniamy kod serwera, ale z pustym światem, więc nie obawiamy się konkurencji ze strony nowo powstałych Nelderimów 😀

Chcielibyśmy też prosić o rozwagę i jeżeli zdecydujecie się że chcecie wprowadzić jakieś zmiany do serwera, to skonsultujcie to uprzednio z nami, żeby nie okazało się, że wasza praca pójdzie na marne.

Jako że kod serwera jest od teraz publiczny, chcemy też publicznie udostępnić tablicę z zadaniami, nad którymi aktualnie pracujemy oraz tymi które mamy w planach, jednakże zanim to się stanie, musimy mieć pewność, że nie udostępnimy czegoś, czego nie chcemy udostępnić 😉

Co nowego przynosi ServUO

Nowy silnik, to nie tylko nowe grafiki, ale i nowe umiejętności. Jedną z nich jest umiejętność Rzucania (Throwing). Umiejętność została dodana w dodatku Stygian Abyss. Jest to umiejętność, która oryginalnie była alternatywą dla Łucznictwa dla rasy Gargulców. My zaś planujemy udostępnić ją dla wszystkich ras.

Ale czym dokładnie to Rzucanie jest?

Rzucanie pozwala graczom używać nowego zestawu broni do rzucania jako umiejętności ataku dystansowego.

Mechanika

Każda broń ma dostęp do podstawowego i maksymalnego zasięgu, przy czym podstawowy zasięg jest modyfikowany przez siłę gracza, aby określić rzeczywisty zasięg.

Absolutny maksymalny zasięg jest ograniczony. Obliczony maksymalny zasięg, na jaki gracz może rzucić swoją bronią, jest używany do określenia, jak dokładny jest jego rzut, gdy próbuje trafić w cel z określonej odległości. Dzięki temu gracz ma „sweet spot”, w którym rzucanie jest najskuteczniejsze, podczas gdy naciskanie na maksymalny zasięg lub rzucanie, gdy jest zbyt blisko celu, powoduje mniejsze obrażenia lub celność.

Rzucony za słabo – Jeśli broń wyposażona w broń ma maksymalny zasięg do sześciu pól, a gracz rzuci w gracza dwa pola dalej (zbyt blisko), ma on karę do szansy na trafienie w wysokości 12%, ale bez redukcji obrażeń.
Idealny – Maksymalny zasięg sześciu płytek, rzucony na odległość czterech płytek. Brak kary do szansy na trafienie, brak redukcji obrażeń
Przerzucony – Maksymalny zasięg sześciu płytek, rzucony na odległość sześciu płytek. Kara za brak szansy na trafienie, ale o 47% zmniejszenie obrażeń

Walka w zwarciu

Mimo że mogą być przeznaczone do rzucania, wszystkie te bronie mają ostre, wredne krawędzie – idealne do złapania niczego niepodejrzewającego wojownika walczącego w zwarciu. Zręczność gracza i umiejętność rzucania na poziomie conajmniej 100 zniweluje karę za szansę trafienia za walkę w zbyt bliskiej odległości.

Kary za Tarcze

Wszystkie bronie do rzucania są jednoręczne, co pozwala rzucającemu na założenie tarczy lub innego przedmiotu w drugiej ręce. Gracz poniesie karę obrony (DCI) i szansy na trafienie (HCI) za użycie tarczy podczas używania broni do rzucania. Kary te można zrównoważyć, inwestując punkty umiejętności w Parowanie. Gracze bez Parowania będą teraz mieli minimalną szansę na trafienie (HCI).

Broń w Paperdollu
A tak prezentuje się w plecaku

Wraz z dodaniem nowych broni, mamy też nowe specjale:

Cyklon posiada Moving Shot i Infused Throw

Czakram posiada: Mystic Arc i Concussion Blow

Gwieździsty Czakram posiada: Armor Ignor i Mortal Strike

Podsumowanie

Kolejne tygodnie mijają, a my nie zwalniamy tempa. Rozwiązujemy kolejne problemy, zamykamy kolejne zadania, przybliżamy się krok po kroku do osiągnięcia celu. A do tego jeszcze znajdujemy troszeczkę czasu żeby dostarczać poprawki na obecny serwer 🙂

Oto, co pojawi się na serwerze w niedługim czasie:

  • zmniejszenie wagi harfy oraz innych ciężkich instrumentów
  • księga zleceń będzie zapamiętywać stronę na której była otwarta
  • poprawienie błędnych komunikatów wykrywacza pułapek
  • przełącznik dla ekipy, który umożliwia wyłączenie komunikatów NPC na czas eventów
  • umożliwienie zielarzowi i łukmistrzowi zbierania konopi i jedwabiu
  • poprawienie przetapiania smoczej zbroi
  • umożliwienie postaci męskiej oswajania jednorożca bez możliwości dosiadania go
  • umożliwienie cięcia butów nożyczkami w celu odzyskania skór