Jak czytać plik battle_models.MODELDB


Ten poradnik został napisany w celu przybliżenia sposobu kodowania. Wyjaśnię tutaj jak zbudowane są modele jednostek, animacje jednostek oraz w jaki sposób można edytować tekstury jednostek. Dołączę kilka zasad podług których plik powinien być edytowany żebyś mógł uzyskać działające animacje i skiny dla twoich (nowych) jednostek.

Jak otworzysz plik battle_models.MODELDB notatnikiem zobaczysz prawdopodobnie niezły burdel na ekranie:

Przykładowo:

22 serialization::archive 3 0 0 0 0 701 0 0 10 mount_pony 1.12 0 0 3 0 0 52 unit_models/Mounts/Medium_Horse/mount_pony_lod0.mesh 121 52 unit_models/Mounts/Medium_Horse/mount_pony_lod1.mesh 1225 52 unit_models/Mounts/Medium_Horse/mount_pony_lod2.mesh 10000 0 0 24 0 0 7 england 69 unit_models/Mounts/Medium_Horse/textures/medium_horse_england.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 42 unit_sprites/england_Mount_Pony_sprite.spr 8 scotland 70 unit_models/Mounts/Medium_Horse/textures/medium_horse_scotland.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 43 unit_sprites/scotland_Mount_Pony_sprite.spr 6 france 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_france.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 41 unit_sprites/france_Mount_Pony_sprite.spr 3 hre 65 unit_models/Mounts/Medium_Horse/textures/medium_horse_hre.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 38 unit_sprites/hre_Mount_Pony_sprite.spr 7 denmark 69 unit_models/Mounts/Medium_Horse/textures/medium_horse_denmark.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 42 unit_sprites/denmark_Mount_Pony_sprite.spr 5 spain 67 unit_models/Mounts/Medium_Horse/textures/medium_horse_spain.texture 68 unit_models/Mounts/Medium_Horse/textures/medium_horse_normal.texture 40 unit_sprites/spain_Mount_Pony_sprite.spr 8 portugal 70 unit_models/Mounts/Medium_Horse/textures/medium_horse_portugal.texture
Chwytasz o co w tym chodzi? Pewnie nie. Cóż, przerzuciłem cały kod i oto rezultaty moich studiów (Razz):

Opiszę teraz w jaki sposób jest zbudowany skrypt skinów jednostek w pliku battle_models.MODELDB (przynajmniej tak jak go rozumiem)

Opis na podstawie często a gęsto używanej jednostki Mercenary Crossbowmen (Najemni Kusznicy)

Zasady:

1. Cyfra opisująca liczbę liter w String-u (wyrażeniu) ORAZ sam String (wyrażenie) muszą być w tej samej linijce, NIE POMYL SIę I NIE WDEPNIJ PRZYPADKIEM ENTER, gra się wykrzaczy jeśli spróbujesz ją odpalić.

2. By sprawdzić poprawność swoich wpisów po prostu uruchom Medievala. Jeśli popełniłeś błąd to gra się wykrzaczy do systemu. Najczęstsza przyczyna to ta że liczba String-a i jego długość są różne.

3. Jeśli edytujesz plik przy pomocy MS Word (możesz śledzić wprowadzane zmiany i skutecznie dopilnować wszystkich Spacji), to pamiętaj by skopiować zawartość do Notatnika i dopiero tam zapisać. Word wprowadzi błędy do zapisu.

Przetestowałem zmiany kodu w moim pliku battle_models.MODELDB. To jest oryginalny fragment tego pliku

16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002
21 mercenary_crossbowmen
1 4
68 unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod0.mesh 121
68 unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod1.mesh 900
68 unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod2.mesh 2500
68 unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod3.mesh 6400
1
4 merc
77 unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_mercs.texture
78 unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_normal.texture
50 unit_sprites/merc_Mercenary_Crossbowmen_sprite.spr
1
4 merc
66 unit_models/AttachmentSets/Final European CB Gun_merc_diff.texture
66 unit_models/AttachmentSets/Final European CB Gun_merc_norm.texture 0 <- kończy się podwójną spacją
1
4 None
18 MTW2_Fast_Crossbow
20 MTW2_Non_Shield_Fast
1
21 MTW2_Crossbow_Primary
1
18 MTW2_Sword_Primary
Poniżej opis zawartości pliku.

Sekcja Animacji:

16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002 (<- położenie albocoś)
21 (Długość stringu ->) mercenary_crossbowmen (<- kończy się spacją i jest nazwą MODELU, która musi być taka sama jak w sekcji "SOLDIER" w pliku EDU, by model mógł używać odpowiedniej animacji i takich samych zasad do upgradu zbroi)
1 (<- Nie wiem co to za liczba, nie zmieniaj jej)
4 (liczba stringów siatek (mesh) czy też plików wymienionych niżej. To są zakodowane w grze animacje i nie można zmienić broni jednostkom)
68 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod0.mesh 121 (<- odległość (chyba kamery) kiedy ten plik jest używany)
68 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod1.mesh 900 (<- odległość kiedy ten plik jest używany)
68 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod2.mesh 2500 (<- odległość kiedy ten plik jest używany)
68 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/mercenary_crossbowmen_lod3.mesh 6400 (<- odległość kiedy ten plik jest używany)
Sekcja Tekstur

1 ( Ilość frakcji które mogą używać tej tekstury)
4 (długość wyrażenia (stringu)->) merc (<- frakcja która może użyć tej tekstury. Merc oznacza Mercenary_unit, więc wszystkie frakcje mogą jej użyć)
77 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_mercs.texture (<- plik tekstury skina (skórki) który jednostka ma używać, ta sama jednostka używa zróżnicowanych tekstur)
78 (Długość stringu ->) unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_normal.texture (<- plik tekstur użytych do cieniowania, efektów oświetlenia i innych efektów, coś jak alpha tekstura)
50 (Długość stringu ->) unit_sprites/merc_Mercenary_Crossbowmen_sprite.spr (<- plik sprite'ów używany dla dalekiego widoku (min zoom), przyśpiesza działanie gry)
1 (liczba frakcji które mogą użyć tekstury broni)
4 (Długość stringu ->) merc (<- Frakcja w której przypadku kolejne animacje będą użyte podczas bitwy: Używa już innych malunków na tarczach i broni)
66 (Długość stringu->) unit_models/AttachmentSets/Final European CB Gun_merc_diff.texture (<-plik tekstur które będą użyte dla drugiej broni)
66 (Długość stringu ->) unit_models/AttachmentSets/Final European CB Gun_merc_norm.texture 0 (<- plik tekstur użytych dla cieniowania i efektów świetlnych drugiej broni, zawiera alpha (teksturę)i jasność)
Sekcja broni
1 (<-Liczba linijek stringów dotyczących wierzchowców)
4 (Długość stringu ->) None (<- typ wierzchowca, None jeśli jednostka nie używa żadnego)

Poniższe dwa wpisy opisują animację, tutaj jednostka używa kuszy i nie posiada tarczy
18 (Długość stringu ->) MTW2_Fast_Crossbow
20 (Długość stringu ->) MTW2_Non_Shield_Fast

1 (<-Liczba następnych linijek stringów (wyrażeń), jednostka NORSE ARCHER posiada dwa wpisy więc ma liczbę 2)
21 (Długość stringu ->) MTW2_Crossbow_Primary (<- określa jaka animacja ma być użyta jeśli kusza jest główną (pierwszą) bronią)

1 (<-Liczba kolejnych linijek stringów, jednostka NORSE ARCHER posiada dwa wpisy, więc będzie tu liczba 2 (dwa))
18 (Długość stringu ->) MTW2_Sword_Primary (<- określa animację jaka ma być użyta jeśli miecz jest główną bronią)

Niestety nie można przełączać między animacjami żeby jednostka używała swojej drugiej broni zamiast głównej. Nie znalazłem sposobu jak to przełączyć (jeszcze). Jednostki z brońmi drzewcowymi używają ich zamiast mieczy (lol).

Mam nadzieję że teraz ten plik jest bardziej czytelny. Możesz używać ENTER to odseparowywania linijek kodu, nie powoduje to błędów.
Ale PAMIĘTAJ !!! że liczba danego stringu i sam string (wyrażenie) muszą być w tej samej linijce!! Niestety gra nie może przetworzyć kodu jeśli nie wie jak długie ma odczytać wyrażenie.
Pamiętaj także że wszystkie odstępy (spacje) muszą pozostać w niezmienione postaci. Wszystkie linijki kodu kończą się jedną spacją, wpisy z zerem (0) natomiast kończą się dwoma.

Zwykle zerem i podwójną spacją kończy się wpis określający skina broni.
Przykładowo: "66 unit_models/AttachmentSets/Final European CB Gun_merc_norm.texture 0 <- ten wpis kończy się zerem i podwójną spacją.

Poniżej pełen kod przytoczonej jednostki (NORSE ARCHER, posiada tarczę):
Cytat:

16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002
13 norse_archers
1
4
60 unit_models/_Units/EN_Peasant_Padded/norse_archers_lod0.mesh 121
60 unit_models/_Units/EN_Peasant_Padded/norse_archers_lod1.mesh 900
60 unit_models/_Units/EN_Peasant_Padded/norse_archers_lod2.mesh 2500
60 unit_models/_Units/EN_Peasant_Padded/norse_archers_lod3.mesh 6400
1
7 denmark
79 unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_denmark.texture
78 unit_models/_Units/EN_Peasant_Padded/textures/EN_Peasant_Padded_normal.texture
52 unit_sprites/denmark_Dummy_EN_Archers_ug1_sprite.spr
1
7 denmark
60 unit_models/AttachmentSets/Final Danish_denmark_diff.texture
60 unit_models/AttachmentSets/Final Danish_denmark_norm.texture 0
1
4 None
11 MTW2_Bowman
14 MTW2_Swordsman
2
19 MTW2_Bowman_Primary
14 fs_test_shield
2
18 MTW2_Sword_Primary
14 fs_test_shield
Autor: me99