Kwasowa Grota Heroes VIIMight & Magic XDark MessiahHorn of the AbyssHistoria Światów MMSkarbiecCzat
Cmentarz jest opustoszały



Edytor Map - FAQ

Częste problemy

Chyba każdy, kto próbował tworzyć własną scenkę, spotkał się z choć jedną z poniższych sytuacji. Starałem się opisać wszystkie, jakie mogą zajść, i dla każdej przedstawić odpowiednie rozwiązanie. Jeśli któreś z rozwiązań nie zadziała, zapytaj o pomoc na Forum Kwasowej Groty.

Lista pytań (kliknij, aby skoczyć):


W przypadku pierwszych czterech problemów postępowanie jest analogiczne dla wszystkich rodzajów modyfikacji, do stworzenia których użyty został Edytor Map.

1. Pracowałem/am nad mapą/scenką/czymkolwiek, a kiedy próbuję wczytać mapę, wyświetla mi się dziwny komunikat
.



Współczuję... albo i nie do końca. Taki komunikat oznacza ni mniej ni więcej, tylko że w czasie pracy nad mapą/sceną/czymkolwiek komputer został wyłączony w "zły" sposób. Stracone pliki są nie do odzyskania.

Jak się przed tym chronić? Przede wszystkim szanować sprzęt i wyłączać komputer prawidłowo. No i robić kopie zapasowe mapy tak często jak to możliwe, najlepiej co 15-20 min lub po każdej większej zmianie. Oczywiście, za każdym razem trzeba wyłączyć edytor, aby pliki się do końca zapisały.

Tak, też tego nie lubię, ale tak już jest i tyle. Takie mamy narzędzie.

2. Moja scenka zniknęła po zamknięciu edytora i nijak nie mogę jej znaleźć.



Przyczyny mogą być trzy albo i więcej. Najprawdopodobniej nie wybrałeś/aś opcji "Eksportuj plik po utworzeniu", przez co scenka się nie zapisała w ogóle i trzeba ją spisać na straty. Jeżeli zaś ta opcja została wybrana, znaczy to, że pliki scenki zapisano w którejś z otwieranych ostatnio map. Teraz musisz znaleźć tę mapę, która była otwarta podczas ostatnich prac nad scenką - po jej otwarciu scenka ponownie pojawi się w Bazie Danych Gry 0. Jeśli tak nie jest, to bardzo mi przykro - przypuszczam, że scenka znalazła się w mapce, która uległa zniszczeniu spowodowanemu "nieprawidłowym" wyłączeniem komputera przed zamknięciem Edytora Map.

3. Moją scenkę widać, była dobrze zapisana, ale nie wczytują się zmiany



Oznacza to, że pliki scenki są rozmieszczone w co najmniej dwóch miejscach - jednym z nich jest folder 'data', gdzie występują one w czystej, niespakowanej postaci i są zawsze widziane przez edytor. Drugim jest archiwum .h5m mapy, która była otwarta (najprawdopodobniej przez przypadek) podczas ostatnich prac nad scenką. Za to Ty otworzyłeś/aś scenkę poza mapą i dlatego nie widać zapisanych w mapie zmian w scence (edytor "widzi" tylko dane gry z 'data' i aktualnie wypakowanej mapy).

Po otwarciu tej mapy załadowanie scenki z jej poziomu będzie możliwe. Jeśli chcesz, aby pliki ponownie znalazły się w jednym miejscu, znajdź tę mapę w folderze Maps i otwórz ją za pomocą archiwizatora (np. 7-zip). Następnie wypakuj folder DialogScenes (z całą zawartością) i scal go z tym z folderu data, zastępując starsze pliki nowszymi.

4. Pracowałem(am) nad scenką, zapisując postępy w folderze data, a teraz chcę ją dołączyć do swojej mapy.



Otwórz plik .h5m swojej mapy za pomocą programu 7-zip. Otwórz folder data - znajduje się tam folder DialogScenes. Dołącz go do archiwum swojej mapki (bezpośrednio). Jeśli modyfikowałeś/aś jakieś inne pliki i też zostały one zapisane w folderze 'data', dołącz też resztę folderów z 'daty'. Potem zapisz archiwum, otwórz mapę za pomocą Edytora Map, przesuń jakiś obiekt tam i z powrotem, zapisz mapkę i zamknij (zmniejsza to rozmiar archiwum). Gotowe!

5. Pracowałem(am) nad scenką w jednej z map, a teraz, po namyśle, chcę przerzucić ją do drugiej mapy.



Jak wyżej - otwórz pliki obu map i przekopiuj odpowiednie foldery (w tym DialogScenes) z jednej do drugiej, zapisz i otwórz drugą mapkę za pomocą Edytora Map, znajdź pretekst do jej zapisania po czym zamknij Edytor.

6. Ustawiłem/am kamerę i ujęcie, ale po odtworzeniu wygląda to mniej-więcej tak.



Ustaw kamerę i ujęcie jeszcze raz, tym razem wybierz tego samego aktora i tu, i tu - albo nie wybieraj żadnych aktorów. Bug wynika z wybrania różnych aktorów, co powoduje przesunięcie odpowiednio ustawionej kamery w inne miejsce niż pożądane (teoretycznie aby skupić się na tym drugim tak jak na tym pierwszym - tyle że ukształtowanie terenu jest nieco inne). Dlatego też w przypadku ujęć "z daleka" można nie wybierać obiektu, na którym kamera miałaby się skupić.

7. Ustawiłem/am mnóstwo stworów i teraz niewygodnie mi programować animacje dla nich.



Jeśli w scence jest dużo aktorów, można jej tworzenie rozdzielić na foldery "data" i "Maps". Wszystkie dane scenki powinny znajdować się w folderze data, a ich kopię "wrzuć" do dowolnego (działającego) pliku .h5m z folderu Maps (dodaj folder DialogScenes z data do archiwum, którym jest ta mapa). Potem otwórz edytor map, otwórz mapę, w której znalazły się pliki scenki i przejdź do scenki dialogowej.

Jak można zauważyć, nie widać żadnych ID aktorów, którzy zostali umieszczeni wcześniej.

Teraz ustaw nowych aktorów, dodaj przeznaczone dla nich animacje i zapisz mapę. Wyjdź z edytora i wypakuj folder DialogScenes do folderu data, zastępując stare pliki nowszymi.

 

Możesz też zobaczyć podobne pytanie dziesiąte.

8. Kiedy próbuję wybrać animację dla aktora, nie widzę jego ID na liście!



Bez paniki. To oznacza, że pliki scenki są rozrzucone w co najmniej dwóch miejscach - edytor "widzi" tylko ID aktorów ustawionych z poziomu danego miejsca scenki, tzn. jeśli ustawiasz aktorów w scence z folderu 'data' to nie zobaczysz ich ID w Edytorze Map. Żeby scalić mapy i widzieć wszystkie ID, postępuj tak jak w [a=#Rozrzucona scenka]punkcie 3[/a].

9. Robiłem/am wszystko jak trzeba, moja scenka była, a potem zniknęła (ale jest w folderze data).



Otwórz jakąkolwiek mapę. W jej właściwościach przejdź do linijki StartScene, po czym przez "wielokropek" wybierz dowolną scenkę. Podmień lokalizację na tę dotyczącą Twojej scenki (jeśli scenka faktycznie jest w folderze data, to nie powinno być z tym problemu).


Ponownie użyj wielokropka, tym razem będzie widać scenkę. Kliknij plik DialogScene prawym przyciskiem myszy i kliknij Wymuś eksport. Wyłącz okno i zamknij mapę (za pomocą Zamknij Modyfikację). Teraz scenka powinna być widoczna w danych gry.

Uwaga: Wygląda na to, że eksportować w ten sposób można tylko jedną scenkę naraz, a więc nie zdziw się, jeśli przy takim eksporcie jednej scenki inne staną się niewidoczne.


10. Jak zrobić epicką scenkę, w której pojawią się całe armie aktorów?



Ręcznie. To znaczy: na wpół ręcznie.

Wytłumaczę to na przykładzie: chcę stworzyć oddział stu zbrojnych (z ulepszeniami), który w pożądanym momencie zawiwatuje na naszą cześć.

Najpierw przygotowuję scenkę tak jak zwykle (razem z eksportem). Potem ustawiam na mapie jednego Krzyżowca i zapisuję.


Teraz przechodzę do folderu data w folderze instalacyjnym Heroes 5, gdzie w podfolderze o nazwie DialogScenes znajduje się folder nazywający się tak jak nasza scenka. Następnie otwieram plik "DialogScene.xdb" w Notatniku (może być też - a nawet polecany jest, zwłaszcza początkującym - NotePad ++). (Edytor Map można zamknąć).

Między tagami <Objects> </Objects> znajduje się zestaw informacji o stworzeniach ze scenki. Jako że aktualnie mam tylko jedno stworzenie, widzę tylko jego parametry (choć gdybym miał ich więcej, wystarczyłoby chwilę poszukać). Jest to standardowy plik "wewnętrzny" (inline) typu AdvMapMonster, stanowiący bezpośredni pomost pomiędzy mapą a plikiem jednostki AdvMapMonsterShared. Bez żadnej szkody dla scenki można podmienić ID stworzenia na jakieś bardziej rozpoznawalne - niech będzie to "Krzyzowiec1". Wystarczy zastąpić "kod" z fragmentu "item_kod" na właśnie "Krzyzowiec1".


Teraz kopiuję wszystko to, co znajduje się pomiędzy tagami <Item> i </Item>, z tymi tagami włącznie, tyle razy ile jednostek chcę mieć (bierzemy pod uwagę, że jedna z nich już jest w scence umieszczona), a więc do uzyskania około 100 jednostek. Każdej kolejnej jednostce w ID podmieniamy numerek ("Krzyzowiec2", "Krzyzowiec3" itd.). Aby przebiegało to sprawniej, pierwsza jednostka, którą kopiuję do schowka, może zamiast "Krzyzowiec1" nazywać się po prostu "Krzyzowiec", a numerek będzie dopisywany. Nic nie zmieniamy w "Position", za to w MonsterShared mogę w pewnym momencie podmienić odnośnik na dotyczący innego stworzenia (żeby było bardziej różnorodnie). ID można też dopisać po zakończeniu "wkopiowywania". Warto zauważyć, że w teorii robot mógłby zrobić to za mnie. Ale nie potrafię takich botów tworzyć, więc się chwilę pomęczę (still better than the Map Editor!).

Aby nie było nieścisłości, poniżej zaznaczony jest zakres, który trzeba skopiować:


... a tutaj tekst w wersji do przeklejenia (dla leniwych; nazwę "Krzyzowiec" podmieniamy na dowolną nazwę, pozycja [Pos] ulegnie zmianie przy przemieszczeniu jednostki, podobnie jak jej obrót [Rot], SharedHref jest odnośnikiem do pliku AdvMapMonsterShared, a więc do faktycznego pliku potwora - odnośnik ów zmieniamy wedle zachcianek; tutaj jest podana ścieżka do Kolosa, gdyż ta od Krzyżowca była za długa i się brzydko przenosiła do następnego wiersza):

</p><p>

        <Item href="#n:inline(AdvMapMonster)" id="item_Krzyzowiec">
            <AdvMapMonster>
                <Pos>
                    <x>51</x>
                    <y>47</y>
                    <z>0</z>
                </Pos>
                <Rot>4.95718</Rot>
                <Floor>0</Floor>
                <Name/>
                <CombatScript/>
                <pointLights/>
                <Shared href="/MapObjects/Academy/Giant.xdb#xpointer(/AdvMapMonsterShared)"/>
                <Custom>false</Custom>
                <Amount>0</Amount>
                <Amount2>0</Amount2>
                <AttackType>ATTACK_ANY</AttackType>
                <MoveType>MOVE_ANY</MoveType>
                <DoesNotGrow>false</DoesNotGrow>
                <MessageFileRef href=""/>
                <Script/>
                <Resources>
                    <Wood>0</Wood>
                    <Ore>0</Ore>
                    <Mercury>0</Mercury>
                    <Crystal>0</Crystal>
                    <Sulfur>0</Sulfur>
                    <Gem>0</Gem>
                    <Gold>0</Gold>
                </Resources>
                <ArtifactID>ARTIFACT_NONE</ArtifactID>
                <Mood>MONSTER_MOOD_AGGRESSIVE</Mood>
                <Courage>MONSTER_COURAGE_CAN_FLEE_JOIN</Courage>
                <AllowQuickCombat>true</AllowQuickCombat>
                <DoesNotDependOnDifficulty>false</DoesNotDependOnDifficulty>
                <AdditionalStacks/>
                <SingleMonsterNameFileRef href=""/>
                <MultipleMonstersNameFileRef href=""/>
                <RacesRandomGroupID>0</RacesRandomGroupID>
                <relationsOverrides/>
            </AdvMapMonster>
        </Item>

A tak wygląda fragment pliku DialogScene.xdb po wklejeniu paru jednostek:


Kopiowanie i wpisywanie numerków jest nieco czaso(i praco)chłonne, więc czujcie się ostrzeżeni. Warto sobie co jakiś czas zapisywać postępy. Po zakończeniu wklejania znowu zapisuję (najlepiej wykonać też kopię zapasową za pomocą opcji Zapisz jako...) plik, zamykam Edytor Map jeśli wcześniej tego nie zrobiłem, i otwieram go ponownie, a potem otwieram zmodyfikowaną już scenkę.

Na pozór nic się nie zmieniło... ekhm... no dobra. Otóż wszystkie dodane wcześniej jednostki stoją teraz upakowane na jednym polu i tylko czekają na to, żeby je rozstawić! Można je rozmieścić losowo lub uformować np. czworobok albo żółwia (ale takiego jak w przyrodzie!) :) (Tak, wystarczyłoby w tym celu raptem parę dziesiątek, niekoniecznie aż stu... ale efekt jest za to świetny, musicie to przyznać). W razie czego we właściwościach scenki, już za pośrednictwem Edytora, można zmienić mapę, na której jednostki są umieszczane. Potem trzeba tylko przeładować scenkę, a jednostki można przenieść całą grupą jeśli zaznaczy się je i przesunie jedną z nich. Trzeba się tylko liczyć z tym, że nasz plik tekstowy będzie wymagał ponownego otwarcia, a kopia będzie nieaktualna - dlatego też, jeśli już, to najlepiej zmienić mapę PRZED rozstawianiem jednostek.


Następnie dodaję kamerę i ujęcie (jeśli tego wcześniej nie zrobiłem), a następnie tworzę sentencję (i najlepiej od razu dodać aktora; można z tym poczekać, ale nie ma takiej potrzeby). Zapisuję postępy i wyłączam Edytor.

Ponownie otwieram plik tekstowy scenki, tym razem widać pewną zmianę: między tagami <Sentences> i </Sentences> coś się pojawiło. Jeśli dodany został aktor, w HeroLink bądź w MonsterLink wstawiony został wewnętrzny plik AdvMapMonster (lub AdvMapHero) aktora - w sekcji Objects pojawi się tylko odnośnik do tego pliku.

Teraz właśnie w formie takich odnośników mogę dodać animacje: dostosowuję tag CustomAnimations do swoich potrzeb, zamieniając jedną linijkę o treści:
<CustomAnimations/>
... na dwie, prezentujące się następująco:
<CustomAnimations>
</CustomAnimations>

Teraz pomiędzy tymi linijkami przeklejam następujący tekst (podmieniwszy uprzednio wartości na pożądane, tzn. AnimName w tym przypadku będzie "happy", a Offset będzie równy 1, a więc animacje zostaną odtworzone z sekundowym opóźnieniem; wskazane jest jednak choć niewielkie zróżnicowanie offsetów, rzędu dziesiątych lub nawet setnych części sekundy, a to po to, żeby całość wyglądała naturalniej) tyle razy, ile mi się żywnie podoba (tutaj: stukrotnie, tak aby odtworzyć animacje setki zbrojnych i ich ulepszeń). Trzeba, co oczywiste, pamiętać, żeby podmienić potem w każdej ID aktora!

                <Item>
                    <heroLink/>
                    <monsterLink href="#xpointer(id(item_Krzyzowiec98)/AdvMapMonster)"/>
                    <AnimationIndex>0</AnimationIndex>
                    <AnimationDelay>1</AnimationDelay>
                    <AnimName>happy</AnimName>
                    <MovePoints/>
                    <FinalAngle>0</FinalAngle>
                    <MovementSpeed>0</MovementSpeed>
                </Item>

Po zakończeniu kopiowania (można się na kilka sposobów "wycwanić", aby nieco usprawnić pracę, ale opracowanie najbardziej efektywnej metody kopiowana pozostawiam Czytelnikom) zapisuję plik (kopia!!!) i sprawdzam w Edytorze jak wyszło :)

Przybij żółwia!

Uwagi:
1. Sentencja nie odtworzy się prawidłowo jeśli którakolwiek z animacji prowadzi do usuniętej lub nieistniejącej jednostki, dlatego też stanowczo odradzam usuwanie wcześniej ustawionych jednostek. Jeśli jednak tak zrobisz, możesz zawsze sprawdzić, której jednostki brakuje i usunąć odpowiednią animację (podpowiedź: użyj opcji Znajdź... i prześledź numerki).
2. Nic nie stoi na przeszkodzie tworzeniu bardziej jeszcze zaawansowanych scenek - wymaga to jednak sporego nakładu pracy oraz doświadczenia, a tłumaczenie wszystkich operacji jest dość niewygodne - i trudne, jako że nie da się wszystkiego uogólnić.
3. Przy pierwszym zapisaniu zmodyfikowanej scenki wewnętrzne pliki <strong>AdvMapMonster</strong> zostaną przeniesione wyżej, a więc do plików animacji - odnośniki do nich będą natomiast w sekcji <strong>Objects</strong> (wyjątkiem jest aktor sentencji, który zostanie przeniesiony jeszcze wyżej, do odpowiedniej linijki w sekcji owej sentencji - odnośniki do niego będą umieszczone zarówno w sekcji animacji, jak i obiektów). Oczywiście, jeśli dany aktor ma przypisaną więcej niż jedną animację, w każdej następnej będzie już umieszczany tylko odpowiedni odnośnik.</p>

© 2003-21 Kwasowa Grota. Wszelkie prawa zastrzeżone. Jakiekolwiek kopiowanie, publikowanie lub modyfikowanie tekstów grafiki i innych materiałów chronionych prawem autorskim znajdujących się na stronie bez wyraźnej zgody autorów jest zabronione.
Komnaty "Heroes V". Redakcja, kontakt