POLISHSEAMEN

Battlestation Midway - Misje - Wyspy i płycizny - teoria

PL_Andrev - 26 Październik 2009, 14:08
: Temat postu: Wyspy i płycizny - teoria
Aby urozmaicić rozgrywkę zwykle dodaje się do mapki wyspy i płycizny. Nie są one zbyt skomplikowane, dzięki temu jest możliwe kopiowanie całych kontynentów między mapami.

Wyspy i płycizny są dodawane do mapy poprzez edycję plików:
0_mm_MMissionX.scn
1_mm_MMissionX.scn
znajdujących się w katalogu universe / scenes / missions / ...

Oto przykładowa procedura wstawiania wyspy (landscanpe):
Cytat:
entity "Landscape" (Landscape) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 3300.0000 0.0015 1200.0000 1.0000 ;
template "Landscape" ;
uid 1;
properties (Common, Landscape) {
"Coast" {
AlphaTextureFile = S "coast_alpha_line_01.dds" ;
BackExtrude = F 6.0000 ;
"CoastTextureColor" {
A = F 0.8000 ;
B = F 0.9020 ;
G = F 0.2353 ;
R = F 0.8824 ;
}
FrontExtrude = F 6.0000 ;
MaximalSegmentSize = I 50 ;
MinimalEdgeLength = F 5.0000 ;
Tex00 = F 0.6000 ;
Tex01 = F 0.0141 ;
Tex02 = F 132.0000 ;
Tex03 = F 0.0100 ;
Tex04 = F 0.0123 ;
Tex05 = F 113.0000 ;
Tex06 = F 0.0100 ;
Tex07 = F 0.0000 ;
Tex08 = F 0.6000 ;
Tex09 = F 1.2000 ;
Tex10 = F 2.3000 ;
Tex11 = F 0.2000 ;
Tex12 = F 0.4000 ;
Tex13 = F 0.4000 ;
Tex14 = F 0.6000 ;
"WaveTextureColor" {
}
}
FilePath = S "Islands\\multiszigetkicsi_11" ;
ModelPath = S "models/gui/map/multiszigetkicsi_11_terkep.mmod" ;
ModelPath_PS2 = S "models/gui/map/multiszigetkicsi_11_terkep_ps2.mmod" ;

"ShallowWater" {
Pos = V3 -142.0000 0.0000 -208.0000 ;
Size = F 890.0000 ;
Texture_PC = S "multiszigetkicsi_11_vizszinezes.tga" ;

}
}
}


"localframe" - podane to co nas najbardziej interesuje: lokalizacja i orientacja względem stron świata
"filepath" - oznacza odwołanie do konkretnych bibliotek opisujących tekstury wyspy
"shallowwater" - to tekstura widoku płycizny, który można sobie darować (zaznaczone na niebiesko)


Płycizna jest reprezentowana jako zestaw punktów określający obszar, w którym okręt podwodny wykona automatyczne wynurzenie - jest on nieco większy niż zakres 'realnej' płycizny widoczny na mapie taktycznej.
Przykładowa procedura płycizny (avoidzone):
Cytat:
entity "AvoidZone" (Path) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 4004.8408 0.0000 1548.4031 1.0000 ;
template "Path" ;

properties (Common, Path) {
Party = E Party : Neutral ;
"PathPoints" {
"Point00" {
Pos = V3 0.0000 0.0000 0.0000 ;
}
"Point01" {
Pos = V3 -5.8792 0.0000 -68.1412 ;
}
"Point02" {
Pos = V3 -49.0332 0.0000 -193.8472 ;
}
"Point03" {
Pos = V3 -149.6365 0.0000 -269.6017 ;
}
"Point04" {
Pos = V3 -306.6946 0.0000 -375.1279 ;
}
"Point05" {
Pos = V3 -718.9984 0.0000 -413.7006 ;
}
"Point06" {
Pos = V3 -921.0975 0.0000 -236.5265 ;
}
"Point07" {
Pos = V3 -976.6299 0.0000 -15.8844 ;
}
"Point08" {
Pos = V3 -855.9838 0.0000 147.3345 ;
}
"Point09" {
Pos = V3 -555.6053 0.0000 251.2803 ;
}
"Point10" {
Pos = V3 -269.4934 0.0000 230.3502 ;
}
"Point11" {
Pos = V3 -29.9968 0.0000 61.0095 ;
}
}
}
}


"localframe" - lokalizacja płycizny i orientacja względem stron świata

Należy zauważyć że orientacja względem stron świata może być zastąpiona poprzez fizyczne przeliczenie wierzchołków, jednak o wiele prostsze jest skopiowanie danej wyspy i obrócenie jej o dany kąt.

Płycizna jest lokalizowana o współrzędne lokalne (0.000 ; 0.000) (czyli poszczególne punkty płycizny odnoszą się do punktu środka (0.000 ; 0.000). Z kolei ten punkt jest lokalizowany w oparciu o pozycję zadaną w parametrze "localframe".


Kopiowanie wysp i płycizn
Kopiowanie i zmiana lokalizacji jest niezwykle prosta - wystarczy skopiować parametr "landscape" i "avoidzone" w pliku mapy (nazwa.scn) i zmienić lokalizację.

Przykład: wyzwanie samolotu, misja 1.
Otwieramy misję i odczytujemy przypuszczalną lokalizację wyspy:


W pliku PC_cargo.scn odszukujemy tekst "landscape" i sprawdzamy czy loaklizacja w przybliżeniu się zgadza (na mapie taktycznej punkt F5 oznacza lokalizację 0,0 - przedziałki są w okolicach 2000 - każda ćwiartka odpowiada wartościom układu współrzędnych XY).
Duża wyspa (i płycizna) musi mieć współrzędne XY dodatnie:
Cytat:
entity "Landscape" (Landscape) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 3300.0000 0.0015 1200.0000 1.0000 ;

entity "AvoidZone" (Path) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 4004.8408 0.0000 1548.4031 1.0000 ;


Skoro jest to ta sama wyspa, nie musimy dodawać bibliotek, tekstur etc.
Kopiujemy oba zakresy (podane na samym początku) i wstawiamy je do tego samego pliku, uwzględniając zmiany:
Zmieniamy nazwę dodając przyrostek "-1",
Zmieniamy lokalizację, zwiększając o 1000 parametr współrzędnej Y,
Obracamy wyspę o 180°, zmieniając pierwszy i trzeci parametr z 1.000 na -1.000,
Cytat:
entity "Landscape_1" (Landscape) {
localframe -1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 -1.0000 0.0000 3300.0000 0.0015 2200.0000 1.0000 ;

entity "AvoidZone_1" (Path) {
localframe -1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 -1.0000 0.0000 4004.8408 0.0000 2548.4031 1.0000 ;


Zapisujemy zmianę, pakujemy plik i wrzucamy do oryginalnego katalogu z grą.
A oto efekty zmiany:

Mapa taktyczna to jak widać klęska.
Wyspa uległa przesunięciu, ale nie jest odwrócona o 180°


Pierwsze podejście - wygląda "nieco" śmiesznie.
Wyspa uległa obrotowi niestety nie wokół jej geometrycznego środka.
Dodatkowo "shalowwater" jest na nowej pozycji (+1000) lecz nie został obrócony.


Drugie podejście:
Usuwam wszystkie parametry "shalowwater" (zaznaczone powyżej na niebiesko).
Graficznie nieco bardziej ubogo, ale efekt zadowalający.
Niestety na mapie nadal bez zmian.



Problem obrotu wyspy na mapie będzie przedmiotem późniejszego rozpoznania.
Dodatkowym problemem jest to, że nie wiadomo czy "avoidzone_1" zostało obrócone, a jeżeli tak to gdzie był środek obrotu.

Wniosek na dziś:
Wyspy możemy przesuwać, natomiast z ich obrotami to już "nie bardzo".
PL_Andrev - 26 Październik 2009, 14:14
:
Kopiowanie wysp z innych plansz

Chcę wstawić największą wyspę z "Polowania na krążownik" (hunt) do misji "Ważny ładunek" (PC_Cargo). Z mapy orientuję się, że wyspa ta powinna mieć lokalizację:


Po przeanalizowaniu pliku:
1_mc_hunt.mpak / universe / scenes / missions / challenge / hunt.scn znajduję odpowiednią frazę (dla wyspy):
Cytat:
entity "Landscape" (Landscape) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 -2400.0000 0.0000 3300.0000 1.0000 ;
template "Landscape" ;
uid 1;

properties (Common, Landscape) {
"Coast" {
AlphaTextureFile = S "coast_alpha_line_01.dds" ;
BackExtrude = F 6.0000 ;
"CoastTextureColor" {
A = F 0.8000 ;
B = F 0.9020 ;
G = F 0.2353 ;
R = F 0.8824 ;
}
FrontExtrude = F 6.0000 ;
MaximalSegmentSize = I 50 ;
MinimalEdgeLength = F 5.0000 ;
Tex00 = F 0.6000 ;
Tex01 = F 0.0141 ;
Tex02 = F 132.0000 ;
Tex03 = F 0.0100 ;
Tex04 = F 0.0123 ;
Tex05 = F 113.0000 ;
Tex06 = F 0.0100 ;
Tex07 = F 0.0000 ;
Tex08 = F 0.6000 ;
Tex09 = F 1.2000 ;
Tex10 = F 2.3000 ;
Tex11 = F 0.2000 ;
Tex12 = F 0.4000 ;
Tex13 = F 0.4000 ;
Tex14 = F 0.6000 ;
"WaveTextureColor" {
}
}
FilePath = S "Islands/multiszigetnagy_01" ;
ModelPath = S "models/gui/map/multiszigetnagy_01_terkep.MMOD" ;
ModelPath_PS2 = S "models/gui/map/multiszigetnagy_01_terkep_ps2.MMOD" ;
"ShallowWater" {
Pos = V3 -500.0000 0.0000 -600.0000 ;
Size = F 2500.0000 ;
Texture_PC = S "multiszigetnagy_01_vizszinezes.tga" ;
}
}


Kopiuję cały zaznaczony obszar do pliku docelowego:
1_mc_pc_cargo.mpak / universe / scenes / missions / challenge / PC_cargo.scn
dla uproszczenia dodaję go na koniec, zmieniając nazwę i lokalizację nowozaplanowanej wyspy:
Cytat:
entity "Landscape_big" (Landscape) {
localframe 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 -4000.0000 0.0000 4000.0000 1.0000 ;


Pozostaje dodać "tylko" tekstury i biblioteki wyspy:
Odszukuję wszystkie pliki zawierające frazę "multiszigetnagy_01" i kopiuję do identycznych katalogów w pliku 1_mc_PC_cargo.mpak.
Wydaje się, że jest to wszystko - pakuję i wrzucam pliki do katalogu z grą:



Efekt zadowalający.
W dole widać przykład, że poszczególne mapy mogą się bezboleśnie nakładać tworząc dużo bardziej skomplikowane kształty całych wysp, archipelagów czy też subkontynentów.