Part of the Heroes 3 Procedural Map Generator: Logic Map Layout generation.
- Do uruchomienia wymagana LuaJIT - download i instalacja zgodnie z instrukcją ( na linuxie generalnie
make && sudo make install) - Na linuxie powinno się kompilowac po uruchomieniu compile.sh, g++ musi mieć ścieżki do bibliotek i headerów
- Do rysowania grafów Graphviz
(Jeśli ktoś chce do Lua jakieś podstawowe IDE nie będące notepadem to proponuję ZeroBrane Studio.)
- testowy program sprawdza zapis/odczyt z plików mapsave (.h3pgm - tak naprawdę to .lua) i rysuje wygenerowany graf.
- test.h3pgm zawiera stan początkowy generatora oraz seed. Jeśli seed jest < 0 to seedem jest time.
- grafy są generowane do folderu LMLGenerator\debug_graphs
- dodatkowo w Configs znajdują się pliki .cfg z opcjami (na razie jest ich niewiele)
- rozbudowanie generatora
- przekazanie wynikowej struktury LML do c++
Plik LMLGenerator.lua, działanie ustala się głównie następującymi parametrami:
INITSTATE- plikdata/init_{INITSTATE}.luabędzie wykorzystywany jako stan generatoraGRAMMAR- plikdata/grammar_{GRAMMAR}.luabędzie wykorzystywany jako gramatykaTRIALS- liczba generowanych grafówDRAW_NONFINAL- jeśli jest true, to rysuje obrazki co krok, a nie tylko finalne
Rysunki generowane są w folderze out_graphs w formacie png.
Stan początkowy zakodowany jest w plikach lua z prefiksem init_ w folderze data.
Listę stref ustala się w polu zones, jako napis oddzielający strefy przecinkami, każda strefa to jedna litera (L lub B za którą jest dowolna liczba).
Listę cech obszaru ustala się w polu features, jako napis oddzielający featues przecinkami, każdy feature to nazwa (dowolny ciag alfanumerycznych), myślnik, strefa do której przynależy
Gramatyka zakodowana jest w plikach lua z prefiksem grammar_ w folderze data.
Gramatyka to tablica reguł, każda reguła musi implementować dwie funkcje:
IsApplicable, która bierze jeden node grafu (o którym wiemy, że są w nim co najmniej dwie zony) i zwraca nil jeśli ta reguła startując z zadanego node nie da się dopasować lub tablicę nodów które się dopasowały.ComputeEffect, która bierze dopasowane wierzchołki grafu (zwrócone przez funkcjęIsApplicable) oraz identyfikator który nalezy wstawić tworzonemu wierzchołkowi, funkcja powinna zwrocić listę zmodyfikowanych przez siebie wierzchołków.
todo
todo
- dopisać nowe reguły
- rozszerzyć opis stref buforowych na format 3B2, gdzie 3 będzie oznaczało ilu graczy ma łączyć strefa
- dodać wagi do reguł (wtedy reguły wybierane roulette wheel?)
- ...
- dopisac multiplayer-merge ;-)
- dopisać program translujący parametry na zawartość początkową