Imperium

Behemoth`s Lair

[Heroes III] Tawerna Bohaterów - losowy generator scenariusza

Permalink

Witam serdecznie!

Jako zapalony, choć cichy fan HoM&M3 postanowiłem wykorzystać moje czarnoksięskie moce programistyczne dla dobra społeczności, pokoju na świecie, powszechnego szczęścia... cóż, chyba się zagalopowałem ;-)
Jakiś czas temu znów zainstalowałem sobie Shadow of Death i z zaciekawieniem śledziłem wyniki działania losowego generatora map. I tutaj naszła mnie pewna wątpliwość: Heroes jest cyklem, który swą potęgę zbudował na warstwie fabularnej. To nie warstwa strategiczna uczyniła z nich najlepszą grę w historii: wręcz przeciwnie, to fakt że nasz bohater zbrojny ramię w ramię z wielką armią, ruszający na terytorium obcej nacji mógł spotkać po drodze zakochaną parę błękitnych smoków sprawiał, że warto było toczyć wciągające rozgrywki. Że już nie wspomnę o Heroes Chronicles, który fabułę dopieścił niesamowicie. Rozumiecie więc, że czegoś mi brakuje w Generatorze losowym map: utworzone mapy nie mają żadnej, ale to absolutnie żadnej głębi.

Tak to, jakiś czas temu ulęgł się w mojej głowie pomysł napisania losowego generatora scenariuszy: programiku napisanego w C + + który oprócz tworzenia losowego terenu (to potrafi każdy program, w tym ten wbudowany w grę) wymyślałby także warstwę fabularną. Jako doświadczony develeoper nie zrobiłem podstawowego błędu i nie rzuciłem się do pisania kodu (pewnie projekt nie przetrwałby nawet jednego dnia), tylko spokojnie i metodycznie zacząłem rozpisywać założenia i algorytmy, którymi go miałem zrealizować.

Potem, gdy zacząłem implementować pierwszą warstwę abstrakcyjną programu, pojawił się poważny problem: nie miałem żadnych, absolutnie żadnych informacji na temat tego w jaki sposób Heroes zapisuje swoje mapy. No dobrze, skłamałem: miałem jedną informację. Wiedziałem że mapy są kompresowane gzipem. Już się przeraziłem że przede mną długie tygodnie z hexedytorem (WoG Teamu nie śmiałem prosić, bo w zasadzie nie miałem im co pokazać, a ja rzadko idę z pustymi rękami do ludzi - no dobra, ten post to wyjątek ;-) ), gdy niejaki CrackedMind, Rosjanin udostępnił mi opis formatu h3m i to jeszcze w bardzo wygodnej dla mnie postaci 010 binary template. Tak więc projekt mógł ruszyć dalej

Mniej więcej cztery dni temu zacząłem się bawić w implementację faktycznego generatora mapy i ukończyłem parę podstawowych metod w klasie ją opisującą (jak również stworzyłem ponad 300 stałych i flag). Jest tego dość żeby stworzyć kompletnie losową mapę (przez losową mam na myśli że każde pole ma inny typ terenu, nie ma bohaterów, miast, ani nic innego, ale są parametry mapy takie jak opis czy informacje o graczach).

Jak "Tawerna Bohaterów" ma wyglądać? W założeniu ma to być konsolowy program napisany w C + + z graficzną nakładką napisaną w C#. Zaletą z takiego rozwiązania jest łatwa konwersja na inne platformy (m.in. na Linuxa). Nie wiem co prawda jak wygląda wsparcie dla Heroes pod egzotycznymi systemami, ale najwyżej ten feature pozostanie niewykorzystany ;-)

Jako że już wcześniej pisałem - nie lubię przychodzić do ludzi z pustymi rękami (zwłaszcza, że to mój pierwszy post tutaj) zaprezentuję może coś, co nigdy miało nie opuścić zacisza mojego folderu z Visual Expressem. Panie i panowie, oto wczesna wersja alfa mojego generatora:
http://dl.getdropbox.com/u/82366/TavernOfHeroes-alpha.rar

Czekam na wszystkie opinie odnośnie pomysłu (bo programu nie ma na razie co komentować, jest tu tylko jako ciekawostka ;-) ). Zarówno krytyczne jak i nie, jestem ciekaw jakie jest wasze zdanie w tej kwestii. Faktem jest że ilość pracy przede mną lekko mnie przeraża i jeżeli okaże się, że program jest zupełnie nietrafiony w swoją niszę (bo np. fani Heroesów to stratedzy, dla których fabuła ma drugorzędne znaczenie), zajmę się pewnie czymś ciekawszym :-)

Chyba nie umiem kończyć postów :-P
Jeszcze jedno - zrozumiałe jest że będziecie zainteresowani czy na taki projekt porywa się amator, czy też mam już jakieś portfolio. Powiem może tak: bardzo lubię inną starą grę, Drakana z 99 roku. Tak bardzo, że pobawiłem się hexedytorem, zdeasemblowałem kod i napisałem do niej patcha (robota podobna do tego co robił Slava z Hereosami, tylko że my [bo robiłem to ze znajomym] pisaliśmy patcha który miał rozwiązać konkretny problem). Zainteresowanych odsyłam tutaj:
http://dl.getdropbox.com/u/82366/drakan_patch_445%2B.exe
Oprócz tego część moich projektów jest na mojej, niestety długo nieaktualizowanej, stronce:
www.piotr-kosek.com


Liczba modyfikacji: 3, Ostatnio modyfikowany: 18.01.2014, Ostatnio modyfikował: Hellburn

Permalink

Ciekawy pomysł, przyznaję. Jakkolwiek nie podoba mi się idea pisania czegokolwiek w C# (jak to ktoś mądry inaczej kiedyś w imieniu MS powiedział z absolutną powagą, ".NET jest środowiskiem wieloplatformowym - działa przecież na wszystkich sześciu odmianach Visty"), będę się temu przyglądać. Dobrze wiedzieć, że ktoś jeszcze się w jakiś konkretny sposób angażuje w dalsze rozwijanie HoMM3.

Od razu ostrzegam, że to, co dostałeś od CrackedMind (czyli ten plik, jak sądzę - dostępny publicznie już od dość dawna, tylko ciężko go znaleźć) to opisy tylko dla SoD - formaty RoE i AB się w kilku miejscach znacząco różnią. Co prawda nie jest to w tym przypadku wybitnie istotne, ale gdybyś chciał to uwzględnić, mogę udostępnić efekty własnych eksperymentów z mapami, obejmujących też starsze wersje gry (włącznie z H1 i H2). A WoG Teamu nie masz po co prosić, i tak nic ci nie dadzą - nawet "swoim" nic nie udostępniają, poza niewielką grupką głównych developerów.


Permalink

Szczerze mówiąc C# jest tylko po to, żeby ułatwić życie osobom, które nie piszą ERMów przez sen*. Sam program to typowa aplikacja konsolowa - nie chciałem jednak, by przerażała, więc potrzebowałem jakiegoś GUI. Jako że w WinAPI się już nie bawię (szkoda nerwów), pozostał mi w zasadzie tylko C# (Pascala zwyczajnie nie znam ;-) ).

Tak, generator jest w założeniu dla SoDa, gdyż ciężko zapewnić zgodność ze wszystkimi wersjami HoMM3 i wolałem się skoncentrować na jednej. SoD jest wdzięcznym tematem, bo ma największy zasób obiektów (po WoGu), a przy tym jest lepiej od WoGa opisany - a, jak już mówiłem, zabawa hexedytorem, choć interesująca, nie jest tym co chcę robić przez najbliższy tydzień.
W H2 i H1 nie grałem (jeżeli nie liczyć odpalenia raz czy dwa z ciekawości - w końcu na coś się kupiło tą sagę Heroes I-III. Co prawda kosztowała dokładnie tyle samo co Heroes III więc potraktowałem dwie pozostałe gry jako gratisy ;-) ), więc ciężko by mi było nawet rozpisać założenia do takiego generatora.

* - to oczywiście podkoloryzowanie ;-)