Odwiedzin: 63075 REJESTRACJA

Unreal Tournament EDYTOR


Unreal Tournament mapy triki download UT Patch forum sonda

Serwis poswiecony tematyce gry Unreal Tournament


Wprowadzenie

Kurs UnrealEd 2.0.

Unreal Editor Tutorial


Celem tego kursu jest kompleksowe zaprezentowanie możliwości edytora do robienia map.
Po jego ukończeniu, użytkownik bez problemu będzie mógł tworzyć,
zarówno proste jak i złożone w pełni profesjonalne mapy.

Przyczyną postania tego kursu UnrealEd 2.0, była pozostawiająca wiele do życzenia,
jakość tutoriali z jakimi można się zetknąć przeszukując internet.

Edytor jest mocno niestabilny, w związku z czym należy liczyć się z faktem,
iż podczas naszej pracy, niejednokrotnie wykrzaczy się nie z naszej winy.
Zamykanie edytora jest jedną z sytuacji, kiedy wykrzacza się zawsze
i można spokojnie przejść nad tym do porządku dziennego.

Kurs jest podzielony na wiele działów, a w każdym z nich są ściśle przedstawione informacje,
które pomogą wam nabyć nowe umiejętności. Przystępując do kolejnych rozdziałów,
powinniście posiadać wiedzę ze wszystkich poprzednich.

Równolegle z trwaniem kursu robiona jest mapka, która w każdym kolejnym dziale,
jest rozwijana o nowe zagadnienia. Chcąc przećwiczyć prezentowane możliwości,
można gdzieś na boku, odtwarzać wykonane elementy, lub tworzyć coś podobnego.
Link do pobrania wzoru, jest umieszczony na końcu każdego rozdziału.

Edytor uruchamiamy plikiem "UnrealEd.exe" znajdującym się w katalogu "System",
w folderze gdzie został zainstalowany Unreal Tournament.

Jeśli nie posiadasz takiego pliku, zainstaluj patcha436, dostępnego w dziale DOWNLOAD.

Modyfikowanie i rozpowszechnianie kursu na użytek inny niż własny zabronione!

Objaśnienie

Menu górne

Zawiera wszystkie opcje, które zostały przypisane odpowiednim nagłówkom.
Jego używanie jest zbędne, ponieważ te same funkcjonalności dają nam opcje, reprezentowane przez ikonki graficzne.

Listwa górna

new map

Tworzenie mapy

open map

Otwieranie mapy

save map

Zapisywanie mapy

undo

Cofnięcie ostatniego ruchu

redo

Powtórzenie cofniętego ruchu
Wyszukiwanie

actor

Przeglądanie elementów

group

Przeglądanie grup elementów

music

Przeglądanie muzyki

sound

Przeglądanie dźwięków

texture

Przeglądanie tekstur

mesh

Przeglądanie przenikalnych elementów

2d shape

Edytor 2D

unreal script editor

Edytor UnrealScript

brash proporties

Właściwości obiektów

surface proporties

Właściwości powierzchni

rebuild geometry

Przebudowanie struktury

rebuild lighting

Przebudowanie oświetlenia

rebuild patch

Przebudowanie ścieżek

rebuild geometry and lighting

Przebudowanie struktury i oświetlenia

rebuild options

Przebudowanie mapy (opcje)

play map

Testowanie mapy

Listwa lewa

Znajduje się na niej pięć grup przycisków.

Pierwsza grupa

move camera

Przemieszczanie kamery

edit vertex

Edycja wierzchołkowa

brush scal

Skalowanie obiektów

brush rotate

Obracanie obiektów

texture pan

Przemieszczanie tekstur

texture rotate

Obracanie tekstur

brush clip

Przycinanie obiektów

Druga grupa

clip select

Odcinanie zaznaczonej części

split select

Rozdzielanie obiektów

flip clip

Obracanie zaznaczonego kierunku obcinania

delete clip

Usuwanie markerów obcinania

Trzecia grupa

Przyciski odpowiedzialne za tworzenie zarysu obiektów.
Każdy z nich posiada atrybuty (aktywowane prawym przyciskiem myszy), które są omawiane przy danym przycisku.
Atrybutem wspólnym jest GroupName, który określa przynależność do grupy (nigdy nie zmieniamy jego wartości).

make cube

Tworzenie zarysu sześcianu
Height: wysokość
Width: szerokość
Breadth: głębokość
WallThickness: grubość ścian (istotne, gdy "Hollow" ma wartość "True")
Hollow: wydrążenie (przeciwproporcjonalne do grubości ścian)
Tessellated: mozaikowy (przeplatane ułożenie tekstur (użycie możliwe jedynie, gdy "Hollow" ma wartość "False")

make sheet

Tworzenie zarysu płaszczyzny
Height: wysokość
Width: szerokość
Axis: orientacja płaszczyzny

make cylinder

Tworzenie zarysu walca
Height: wysokość
OuterRadius: promień walca
InnerRadius: promień walca wewnętrznego (istotne, gdy "Hollow" ma wartość "True")
Sides:ilość ścian tworzących powierzchnie boczną
AlingToSide: wyrównanie do boku (w rzucie pionowym wyrównanie bokiem do poziomej lini siatki)
Hollow: wydrążenie (promień wydrążenia określa promień walca wewnętrznego)

make cone

Tworzenie zarysu stożka
Height: wysokość
CapHeight: wysokość stożka wewnętrznego
OuterRadius: promień podstawy stożka
InnerRadius: promień podstawy stożka wewnętrznego (istotne, gdy "Hollow" ma wartość "True")
Sides: ilość ścian tworzących podstawę (również wewnętrznego stożka)
AlingToSide: wyrównanie do boku (w rzucie pionowym wyrównanie bokiem do poziomej lini siatki)
Hollow: wydrążenie (wielkość wydrążenia przy podstawie określa promień podstawy stożka wewnętrznego)

make sphere

Tworzenie zarysu sfery
Radius: promień
SphereExtrapolation:Złożoność (wyznacza z ilu wierzchołków tworzona będzie sfera zgodnie z wzorem wzor )
Już przy złożoności 3-ciej (66 wierzchołków) mogą występować problemy (należy uważać z używaniem w miejscach akcji).
Generalnie nie należy wychodzić powyżej złożoności 5-tej (1026 wierzchołków), a w miejscach do których playerzy nie mają dostępu,
najlepiej używać meshy (przenikalnych elementów).

make curved stairs

Tworzenie zarysu zaginających się schodów
InnerRadius: promień wewnętrznego wycięcia
StepHeight: wysokość stopnia
StepWidth: szerokość stopnia
AngleOfCurve: kąt nachylenia stopnia względem poprzedniego
NumSteps: ilość schodów
AddToFirstStep: wysokość dodana do pierwszego stopnia
CounterClockwise: przyrost zgodny z kierunkiem wskazówek zegara

spiral stairs

Tworzenie zarysu spiralnych schodów
Height: wysokość
StepLength: długość stopnia
StepHeight: wysokość stopnia
StepWidth: szerokość stopnia
NumSteps: ilość schodów
AddToFirstStep: wysokość dodana do pierwszego stopnia

lineral stairs

Tworzenie zarysu podstawowych schodów
Height: wysokość
StepLength: długość stopnia
StepHeight: wysokość stopnia
StepWidth: szerokość stopnia
NumSteps: ilość schodów
AddToFirstStep: wysokość dodana do pierwszego stopnia

make terrain

Tworzenie zarysu wzniesień
Height: wysokość
Width: szerokość
Breadth: głębokość
WidthSegments: ilość segmentów, z których składa się głębokość
DepthSegments: ilość segmentów, z których składa się szerokość

make volumetric

Tworzenie płaszczyzn przecinających się w samym środku.
Height: wysokość
Radius: promień
Numsheets: liczba płaszczyzn

Czwarta grupa

add

Wklejanie obiektu zgodnego z zarysem (Ctrl+A)

substract

Wycinanie obiektu zgodnego z zarysem (Ctrl+S)

intersect

Wycinanie z zarysu przestrzeni zajmowanych przez obiekty

deintersect

Przycinanie zarysu do przestrzeni zajmowanych przez obiekty

add special

Dodawanie specjalnego obiektu

add mover

Dodawanie ruchomego obiektu

Piąta grupa

show selected

Pokazywanie zaznaczonych przedmiotów

hide selected

Ukrywanie zaznaczonych przedmiotów

show all

Pokazywanie wszystkich przedmiotów

invert

Zamiana zaznaczeń

speed

Zmiana prędkości kamery

Okna

Nad każdym z okien edytora widnieje pasek opcji, pozwalających na przełączanie widoku.
Po jego lewej stronie znajduje się nazwa aktualnego widoku.

preview move elements

Widok z uwzględnieniem ruchu aktywnych elementów

top view

Widok techniczny od góry

front view

Widok techniczny od przodu

side view

Widok techniczny od boku

preview view

Widok szkieletowy

preview

Widok kolorów zamiast tekstur (każdej zostaje przypisany indywidualny kolor)

preview

Widok BSP

textured_view

Widok nie uwzględniający oświetlenia

dynamic view

Widok generalny

zone view

Widok stref

Listwa dolna

command

Linia komend (przykładowa komenda: ACTOR SELECT ALL)

log

Logi

toggle vertex

przyciąganie wierzchołków zarysu do wierzchołków brusha.

toggle drag

Przesuwanie po liniach siatki

grid size

Gęstość siatki

rotation grid

Obracanie po liniach siatki

maximize viewport

Maksymalizuje aktywne okno

Przemieszczanie

Manewrowanie kamerą:
Okno 3D:
LPM: przemieszczanie i obracanie się na płaszczyźnie poziomej
PPM: zmiana kierunku kamery
LPM + PPM: przemieszczanie się po płaszczyźnie pionowej

Okno 2D:
LPM lub PPM: przemieszczanie
LPM + PPM: powiększanie
Ctrl + LPM: zaznaczanie
Manewrowanie obiektami:
Crtl + PM - przemieszczanie obiektów
Shift + PM - przemieszczanie obiektów wraz z kamerą

Okno 3D:
Przed przemieszczeniem obiektu (zarysu) należy go wcześniej zaznaczyć.
Obiekty w oknie 3D zaznaczamy klikając w nie trzymając Shift.

LPM: przód / tył
PPM: lewo / prawo
LPM + PPM: góra / dół

Okno 2D:
LPM przemieszczanie
PPM: obracanie względem zaznaczonego wierzchołka

Pierwsza mapa

Wycinanie i wklejanie

Klikamy PPM w sześcian(cube). Ustawiamy wartości 512x2048x2048 i klikamy "Build". Następnie klikamy na powstałym zarysie LPM, po czym wciskamy Crtl+S (substract). Powstało nam pomieszczenie, do którego wstawimy skrzynię.
Ponownie klikamy w sześcian i ustalamy wartości 128x128x128. Korzystając z widoku przedniego (lub bocznego) obniżamy nasz zarys skrzyni, tak aby stykał się z podłogą (w przypadku problemu z dopasowaniem należy zagęścić siatkę (PPM w oknie 2D i polu "Grid" należy nadać niższą wartość od obecnej) i wciskamy Crtl+A (add).

Teksturowanie

W celu nadania obiektom odpowiedniego wyglądu, klikamy ikonę przeglądarki tekstur (teksture).
Klikamy ikonkę "Open Package" i ładujemy plik "RainFX.utx". Otwieramy plik RainFX. Spośród ikonek, które ujrzymy po otwarciu paczki - wybieramy "Concrete" i minimalizujemy okno z teksturami. Trzymając Ctrl zaznaczamy wszystkie 4 ściany (przy obracaniu się puszczamy Ctrl). Klikamy prawym na obszarze zaznaczonym i wybieramy "Apply Texture : Concrete". Następnie zaznaczamy sufit i podłogę, otwieramy przeglądarkę tekstur i wybieramy "Concretebase".
Analogicznie ustawiamy teksturę "Crate2" dla skrzyni. Zaznaczamy wszystkie ściany pomieszczenia oraz podłogę i sufit. PPM klikamy w zaznaczony obszar i wybieramy "Surface Proporties" (F5). W zakładce "Aligment" w obszarze "Scaling" ustawiamy wartość 2.0 i zatwierdzamy.

Zakładka "Alignment":
Pan:
U / V - przesunięcie tekstury w poziomie / pionie o klikniętą ilość jednostek
Rotation:
45 / 90 - obrócenie tekstury o klikniętą ilość stopni
Flip U / V - przerzucenie tekstury w poziomie / pionie
Alignment:
Align to floor - wyrównanie do podłogi (używa się do poziomych tekstur)
Wall direction - wyrównanie do kierunku ściany (używa się do pionowych tekstur)
Wall Pan - wyrównanie w pionie (jest przydatne do wyrównywania grupy wielu tekstur na ścianie)
Unalign - brak wyrównania
Scaling:
Simple: - rozciąganie proporcjonalne
U: - rozciągnięcie w poziomie
V: - rozciągnięcie w pionie

Rozmieszczanie elementów

Nad skrzynią umieszczamy światło, poprzez kliknięcie PPM na górnej ścianie i wybranie "Add Light Here". Tworzymy w ten sposób 4 światła, które odsuwamy od boków skrzyni o 192 jednostki. Również z każdej strony skrzyni umieszczamy po elemencie startowym. Aby to uczynić klikamy przeglądarkę elementów (actor).
Wybieramy "Actor" -> "NavigationPoint" -> "PlayerStart". Teraz klikamy w ziemię PPM obok skrzyni i po kolei wybieramy opcję "Add Player Start Here". W tym miejscu (w menu) zawsze znajduje się opcja dodania światła, oraz elementu wybranego z przeglądarki tekstur.

Wykończenie

Klikamy "Przebudowanie mapy" (options) a następnie przycisk "Build" i zapisujemy ją przykładowo jako "DM-a_Kurs.unr" (dzięki czemu, o ile nie macie dodatkowych map AS i CTF jest ona widoczna przy otwieraniu, bez potrzeby przewijania suwakiem). Teoretycznie mapa będzie już działać. Jednak brak screena, oraz muzyki w samej grze trochę kłóci się z pojęciem skończonej mapy.

W celu zlikwidowania tych niedociągnięć przystępujemy do następujących działań.
Maksymalizujemy okno 3D. Klikamy "Show Selected Actors Only" (show selected actors only) i naciskamy "Print Screen". Otwieramy jakikolwiek program graficzny i wklejamy do niego nasz zrzut ekranu.
Następnie przycinamy obrazek do wymiarów 256x256 i zapisujemy jako "Screenshot.bmp".
W UnrealEditor klikamy w przeglądarkę tekstur i wybieramy "File" -> "Import...".
Z rozsuwanego menu "Pliki typu" wybieramy "All files" i importujemy naszą teksturę. W oknie , które po chwili ujrzymy jako "Package" wpisujemy - MyLevel, "Group" - (puste pole), a "Name" zostawiamy jako "Screenshot". Zaznaczamy naszą teksturę (jeśli nie da się LPM to próbujemy PPM).
W widoku 3D wysuwamy się poza naszą mapkę, tak aby zobaczyć siatkę. Klikamy na niej PPM i wybieramy "LevelProporties" (F6). Przy polu "LevelInfo" -> "Screenshot" klikamy "Use". Pole powinno zostać wypełnione wpisem "Texture'MyLevel.Screenshot'".
Wypełniamy również pola: "Nick" - twój nick (lub imię i nazwisko, lub imię 'nick' nazwisko),
"Ideal Player Count" - 2-3, oraz "Title" - Cube. Ponownie przebudowujemy i zapisujemy mapę.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Zaopatrzenie

Lista elementów

Wszystkie elementy, które wstawiamy na mapę znajdują się w przeglądarce elementów.
Najistotniejsze z nich to:

Info:
» ZoneInfo
LavaZone
TeleportZone
Inventory:
» Pickup
» Ammo
» TournamentAmmo
BioAmmo
BladeHopper
BulletBox
RifleShell
FlakAmmo
MiniAmmo
EClip
PAmmo
RocketPack
ShockCore
SuperShockCore
WarHeadAmmo
» TournamentHealth
HealthPack
HealthVial
MedBox
» TournamentPickup
Armor2
ThighPads
UDamage
UT_Invisibility
UT_Stealth
UT_JumpBoots
ut_SieldBelt
» Weapon
» TournamentWeapon
Translocator
ChainSaw
ImpactHammer
enforcer
doubleenforcer
ut_biorifle
ShockRifle
SuperShockRifle
PulseGun
ripper
minigun2
UT_FlakCannon
UT_Eightball
SniperRifle

KeyPoint:
AmbientSound

Light:
TorchFlame

NavigationPoint:
LiftCenter
LiftExit
PathNode
PlayerStart
» Teleport
VisibleTeleport
Triggers:
Counter
Kicker
Trigger

Elementy wybieramy w przeglądarce, a wstawiamy poprzez kliknięcie PPM w oknie 3D i wybranie polecenia "Add * here".
W widoku 2D bocznym (lub frontowym) należy się upewniać czy dana rzecz nie została umieszczona w podłożu.

Umieśćmy płytę o wymiarach 8x2048x512 oddaloną od tylniej ściany o 256 jednostek. Nadajmy jej przykładową teksturę "RainFX.Table1". Umieśćmy wszystkie bronie w kolejności, w jakiej występują w grze, oraz za nimi połóżmy amunicję do każdej z nich.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Movery / Triggery

Wstęp

W tym rozdziale omówimy zarówno movery jak i triggery, ponieważ są to elementy ściśle ze sobą związane.
Triggerami na ogół aktywujemy movery, które to również mogą pełnić rolę triggerów.

Na początek kopiujemy całą zawartość mapy (trzymając "Ctrl" i "Alt" zaznaczamy obszar myszką, klikamy PPM i wybieramy "Duplicate"). Przesuwamy całość tak, aby znalazła się 128 jednostek od obecnego pomieszczenia. Ze skopiowanej części usuwamy elementy "PlayerStart", wszystkie "Inventory", oraz płytę na której leżały.

Drzwi

Pomiędzy pomieszczeniami robimy wycięcie o wymiarach: 192x192x128 (tak aby utworzyć miejsce na drzwi). Po połączeniu pomieszczeń, zmieniamy wymiary zarysu na 192x192x32, wybieramy odpowiednią teksturę i klikamy "Add mover here" (add). Przesuwamy czerwony zarys i klikamy prawym w movera (fioletowy zarys) czyli naszych drzwi. Z zakładki "Movers" wybieramy "Key 1". Przesuwamy zarys w górę o 176 jednostek i w zakładce "Movers" klikamy "Key 0 (Base)".

Właściwości ruchu

"Mover Proporties" -> "Mover"
bDamageTriggered - możliwość uszkodzenia
bTriggerOnceOnly - możliwość jednorazowego użycia
DelayTime - zwłoka przed wykonaniem ruchu początkowego
MoveTime - czas ruchu pomiędzy punktami
StayOpenTime - czas przestoju w punktach
MoverEncroachType - reakcja movera na zetknięcie z graczem:
ME_StopWhenEncroach - zatrzymanie movera
ME_ReturnWhenEncroach - powrót movera
ME_CruschWhenEncroach - zmiażdżenie gracza
ME_IgnoreWhenEncroach - przesunięcie (jeśli możliwe) gracza
NumKeys - ilość punktów przestoju (musi być równa z ilością przypisanych "Key'sów" z zakładki "Movers").

Właściwości dźwięku

"Mover Proporties" -> "MoverSounds"
ClosedSounds - dźwięk zamknięcia
ClosingSounds - dźwięk rozpoczęcia zamykania
MoveAmbientSounds - dźwięk ruchu (zapętlony)
OpenedSounds - dźwięk otwarcia
OpeningSounds - dźwięk rozpoczęcia otwierania

Dla otwarcia i zamknięcia ustawiamy przykładowo "Sound'DoorsAnc.GenericThumps.adend60'",
a dla ruchu movera "Sound'DoorsAnc.Stone.sdoorL2'".
Dźwięki rozpoczęcia otwierania i zamykania na ogół nie są używane.

Samootwierające się drzwi

Teraz zrobimy drugie drzwi, dwuczęściowe, otwierające się przed graczem (zanim ich dotknie).
Wycinamy kolejne przejście między pomieszczeniami o wymiarach 256x256x128. Wstawiamy w to miejsce 2 przylegające do siebie movery o wymiarach 256x128x32. W elementach z zakładki "Trigers" zaznaczamy "Trigger" i wstawiamy go dokładnie w środek.

Zaznaczamy oba movery i we właściwościach wchodzimy w zakładkę "Events" i polu "Tag" przypisujemy wartość Door.
Dla "Object" -> "InitialState" wybieramy TriggerControl.
Polu "Mover" -> "MoveTime" przypisujemy wartość 0.2. Ustawiamy odpowiednie tekstury oraz dźwięk.

Natomiast we właściwościach trigera w "Events" -> "Event" wpisujemy Door, czyli nazwę naszych drzwi.
Polu "Collision" -> "CollisionHeight" ustawiamy 128, a "Collision" -> "CollisionWidth" - 160.

Właściwości triggera

"Trigger Proporties" -> "Trigger"
bInitiallyActive - początkowo aktywny
bTriggerOnceOnly - możliwość jednorazowego użycia
DamageThreshold - próg uszkodzenia (dla "BumpType" -> TT_Shoot)
Message - wiadomość pojawiająca się w momencie użycia
RepeatTriggerTime - ponawianie wykonania ruchu
ReTriggerDelay - bierność po ostatnim użyciu
TriggerType - aktywacja triggera:
TT_PlayerProximity - zetknięcie
TT_AnyProximity - zetknięcie lub strzał (nie działa dla "ImpactHammer", "ChainSaw",
"Enforcer", "ShockRifle"(1 tryb), "PulseGun (2 tryb)", "SniperRifle")
TT_shoot - strzał (nie można niczym przestrzelić również przez otwarte drzwi)

Dla otwarcia i zamknięcia ustawiamy przykładowo "Sound'DoorsAnc.GenericThumps.adend60'",
a dla ruchu movera "Sound'DoorsAnc.Stone.sdoorL2'".
Dźwięki rozpoczęcia otwierania i zamykania na ogół nie są używane.

Drzwi otwierane strzałem

Tworzymy drzwi o wymiarach 192x192x128, ustawiamy teksturę i dźwięk, wstawiamy w środek triggera, ustawiamy odpowiednio wartości "Tag", "Events", oraz czasy movera. W "Object" -> "InitialState" ustawiamy - TriggerOpenTimed.
We właściwościach triggera "Collision" -> "CollisionHeight" i "Collision" -> "CollisionWidth" ustawiamy na 96,
a "Trigger" -> "TriggerType" na - TT_AnyProximity.

Drzwi otwierane przyciskiem

Tworzymy takie same drzwi jak powyższe. Wartość pola "InitialState" ustawiamy również na TriggerOpenTimed.
Tworzymy na ścianie wciskanego movera (przycisk). W polu "Event" wprowadzamy "Tag'a" naszych drzwi.
Taki mover będzie spełniał jednocześnie funkcje triggera.

Winda

Wytnijmy teraz pomieszczenie o wymiarach 768x256x1024 i umieśćmy je tak,
aby łączyło się z tyłami pierwszego pomieszczenia.
Oświetlamy je równomiernie 2 źródłami światła.
Następnie wykrawamy obiekt o wymiarach 256x256x256, który łączymy z tylną ścianą na samej górze.
Umieszczamy w nim jedno światło. Następnie na samym dole pomieszczenia, pod ścianą,
umieszczamy movera (windę) o wymiarach 16x256x256.
W zakładce "Movers" wybieramy "Key 1", następnie przeciągamy windę na samą górę
i z zakładki "Movers" wybieramy "Key 0 (Base)".
Na samej górze możemy umieścić HealthPack'a.

Winda aktywowana przyciskiem

Wytnijmy pomieszczenie o wymiarach 8192x256x1024 i umieśćmy je tak, aby łączyło się
z tyłami pierwszego pomieszczenia (obok poprzedniego wycięcia).
Oświetlamy je równomiernie rozłożonymi 16 źródłami światła.
Na samej górze robimy kolejne wycięcie o wymiarach 512x256x256.
Umieszczamy w nim jedno światło. Na samym dole pomieszczenia, pod ścianą umieszczamy movera (windę),
o wymiarach 16x256x256.
W zakładce "Movers" klikamy "Key 1", a następnie przeciągamy windę na samą górę
i z zakładki "Movers" wybieramy "Key 0 (Base)".
Na samej górze możemy umieścić Shielda (UT_ShieldBelt).
Winda jest jednak tak wysoka, że skok z niej nawet po zebraniu Shielda i tak zakończy się śmiercią,
dlatego przerobimy tę windę tak, aby można ją było przywołać przyciskiem.
Na samej górze umieszczamy movera (przycisk), można zduplikować ten, którego użyliśmy przy drzwiach i zmienić mu wartość "Event" przykładowo na "lift_height" (tę wartość należy przypisać do pola "Tag" naszej windy), oraz we właściwościach windy w polu "Object" -> "InitialState" należy wprowadzić wartość - TriggerOpenTimed.
Ponownie definiujemy punkty docelowe.
Następnie polu "Trigger" -> "Event" przypisujemy wartość - "lift_height", a "Collision" -> "CollisionRadius" - 96,
"CollisionHeight" - 40.

Winda z wieloma elementami pośrednimi

Wytnijmy pomieszczenie o wymiarach 2048x256x1024 (4 światła) i umieśćmy je po prawej stronie od środkowej windy.
Następnie na samej górze (jak w poprzednich przypadkach) robimy wycięcie o wymiarach 256x256x256 (1 światło).
Za nim robimy pomieszczenie o wymiarach 2048x256x4096 (20 świateł, najlepiej wykorzystując zaznaczanie i duplikacje w rzucie pionowym).
Za nim wycięcie o wymiarach 2048x256x256 (3 światła), a na jego końcu wycięcie o wymiarach 256x256x256 (1 światło), gdzie umieszczamy pancerz (Armor2).
Następnie tworzymy movera o wymiarach 8x256x256 i umieszczamy go na dole pierwszego pomieszczenia.
W zakładce "Movers" klikamy "Key 1", przeciągamy windę do góry i klikamy "Key 2", przeciągamy windę do końca (w poziomie) i klikamy "Key 3", przeciągamy windę do góry i wybieramy "Key 0 (Base)".
Po czym polu "Mover" -> "NumKeys" nadajemy wartość - 4.

Skrzynia otwierana strzałem

Skrzynie stojącą w pomieszczeniu 2 usuwamy, aby w jej miejsce wstawić skrzynię z odpadającą jedną ze ścian.
Tworzymy obiekt o wymiarach 128x128x120. Wycinamy w nim sześcian o boku 112. Tworzymy movera o wymiarach 128x128x8, którego przykładamy do krótszego boku. Nadajemy mu następujące właściwości:
"Mover" -> "bDemageTriggered" - True, "bDynamicLightMover" - True, "bTriggeredOnceOnly" - True, "DamageThreshold" - 20,
"MoverEncroachType" - IgnoreWhenEncroach, "MoverGlideType" - MV_MoverByTime, "MoveTime" - 0.45.
"MoverSonds" -> "OpendSound" - Sound'DoorsAnc.Wood.wlend31'.
"Object" -> "InitialState" - TrggerOpenTimed.
Ustawiamy odpowiednio punkty krańcowe.

Deski zniszczalne

Wycinamy za ścianą 2 pomieszczenia wnękę o wymiarach 128x128x512.
Następnie robimy zarys o wymiarach 256x4x32, za pomocą którego tworzymy movery,
którymi zastawiamy to wejście w sposób chaotyczny.
Moverom przypisujemy właściwości takie bokowi skrzyni z powyższego przykładu (nie licząc dźwięku, oraz czasu ruchu,
który ustawiamy na 0). Punkty końcowe ustawiamy w niedostępnym dla graczy miejscu.
Następnie za każdą z desek ustawiamy "Effects" -> "ExplodingWall", którym nadajemy właściwości:
"ExplodingWal" -> "NumWoodChunks" - 16, "NumWallChunks" - 0, "WoodParticipleSize" - 2, "WoodTeksture" - UT.WOODf.
"Collision" -> wszystkie 6opcje - False, "CollisionHeight" - 0, "CollisionRaidus" - 0.
Dla "ExplodingWall" polu "Tag" przypisujemy - dd(numer), a dla "Mover" polu "Event" przypisujemy również - dd(numer).
Bywa, że tego typu aktywne elementy sprawiają problemy. Przykładowo dana rzecz rozpada się jedynie gdy skrzela się z jednej strony, albo po jej zniszczeniu jakiś inny mover staje się przeźroczysty. Jeśli zdarzy wam się taka sytuacja, musicie kombinować z przesuwaniem (przekręcaniem) elementów.

Właściwości ExplodingWall

"ExplodingWall Proporties" -> "ExplodingWall"
BreakingSound - dźwięk odtwarzany podczas rozpadania się elementów
bTransucentGlass - przeźroczystość odłamków
bUnlitGlass - niezależność odłamków od światła
ExplosionDimensions - zasięg rozmieszczenia odłamków w momencie eksplozji
ExplosionSize - zasięg rozrzutu odłamków
Numparticles - ilość odłamków tworzonych w momencie eksplozji
Glass/Wall/WoodParticleSize - rozmiar odłamków
Glass/Wall/WoodTeksture - tekstura odłamków
NumGlass/Wall/WoodChunks - ilość odłamków

Światło na przycisk

Wycinamy pomieszczenie o wymiarach 512x1024x384, obok szerokich drzwi.
Robimy wycięcie łączące o wymiarach 128x64x128 i wstawiamy jakieś drzwi.
Wstawiamy specjalne światło "Light -> TriggerLight".
We właściwościach światła polu "Object" -> "InitialState" ustawiamy wartość - TriggerToggle.
Robimy przycisk na ścianie dla światła.
Następnie ustawiamy drugie światło i robimy triggera, który zaświeca je w momencie,
kiedy jesteśmy w jego zasięgu, a gasi się kiedy go opuścimy.
W tym celu we właściwościach światła polu "Object" -> "InitialState" ustawiamy wartość - TriggerControl.

Właściwości obiektu (inicjacji)

"TriggerLight Proporties" -> "TriggerLight"
bInitiallyON - początkowo włączony
ChangeTime - czas płynnego przejścia między stanami ON / OFF

Właściwości TriggerLight

"TriggerLight Proporties" -> "Object"
TriggerControl - światło aktywne a momencie aktywności triggera
TriggerToggle - światło włączane/wyłączane triggerem
TriggerTurnsON - światło włączane jednorazowo
TriggerTurnsOFF - światło wyłączane jednorazowo

Mapa

Kliknij TUTAJ aby pobrać mapę.


Zony / Światła

Wstęp

W tym rozdziale omówimy zony i światła. Zagadnienia zostały połączone przez wzgląd na występujące powiązania.
Przykładowo nie możliwy do osiągnięcia jest efekt mgły bez użycia zonów, czy zużywającego energię ognia.

Zony

Spolszczona nazwa stref (ang. Zone), bez których budowanie jakiejkolwiek większej (bardziej złożonej) mapy,
obarczone jest ryzykiem powstania dziur. Ich efektem może być przelecenie przez podłogę do pomieszczenia poniżej,
czy przejście przez ścianę. Tego typu efekty uboczne, wcale nie muszą wystąpić,
ale lepiej profilaktycznie przestrzegać zasady podziału na strefy.
Tworzy się je poprzez przedzielenie pomieszczeń niewidzialną płaszczyzną (lub kilkoma płaszczyznami, jeżeli takich połączeń jest kilka), która musi przylegać lub wnikać w ściany. Po wybraniu płaszczyzny (sheet) i ułożeniu jej w sposób dzielący pomieszczenia klikamy "Add Special Brush", wybieramy opcję "Zone Portal" i zatwierdzamy nasz wybór klikając "OK".
W każdej z podzielonej stref powinien znaleźć się "Info" -> "ZoneIno".
W rzucie 3D klikając w "Zone/Portal" (Zone) uzyskujemy widok stref, którym przypisane są poszczególne kolory.
Każde szczelne pomieszczenie jest automatycznie niezależną strefą, nawet bez umieszczania elementu "ZoneInfo". Zaleca się jednak umieszczać "ZoneInfo" w każdej strefie, dla utrzymania ładu.
Na naszej mapie dokonamy póki co jednego podziału pomiędzy pierwszym, a drugim pomieszczeniem.
Umieszczamy płaszczyznę o wymiarach 512x2048 między pomieszczeniami, tak aby nie stykała się z drzwiami, oraz nie pokrywała z zewnętrzną częścią ściany.
Następnie do drugiego pomieszczenia wstawiamy "ZoneInfo".

Właściwości stref

bFogZone - strefa mgły
bNeutralZone - strefa nieśmiertelności
bNoInventory - broń zostaje odebrana zaraz po respawnie w danej strefie
bPainZone - strefa bólu
DamagePerSec - ilość energii tracona każdej sekundy (przy włączonym "bPainZone")
bWaterZone - strefa wodna
ZoneGravity - ustawienia grawitacji

Światła

Na początek, z lewej strony pierwszego pomieszczenia, wycinamy kolejne 2 pomieszczenia o wymiarach 512x1024x768.
Pomieszczenia dzieli ściana o grubości 512. W obu umieszczamy światło 384 jednostek od ścian.
Testujemy światło pod względem kolorów, efektów i typów.
Chcąc cieszyć się efektami specjalnymi świateł należy w grze mieć włączoną opcję "Use Dynamic Lighting".

Kolor światła

"Light Proporties" -> "LightColor"
Color (przycisk) - otwiera okno do ustawienia koloru
LightBrightness - jasność
LightHue - barwa
LightSaturation - proporcje pomiędzy wybranym a białym kolorem

Właściwości światła

"Light Proporties" -> "Lighting"
LightPeriod - okres wykonania cyklu (np. LE_Searchlight, LT_Pulse)
Lighting bCorona - łuna wokół światła
LightRadius - zasięg światła
LightCone - kąt świecenia świateł kierunkowych (np. LE_StaticSpot)
LightEffect - ustawia dany efekt dla światła
VolumeBrightness - gęstość / jasność mgły
VolumeRadius - zasięg / zagęszczenie mgły

LightEffect:
LE_None - bez efektu
LE_TorchWaver - światło odbite od tafli wody
LE_FireWaver - światło ognia
LE_WateryShimmer - światło migoczące jak pod wodą
LE_Searchlight - światło latarni morskiej (LightPeriod)
LE_SlowWave - światło tworzące powiększające się kręgi (jak po wrzuceniu czegoś do wody)
LE_FastWave - przyspieszony efekt "LE_SlowWave"
LE_StaticSpot - światło punktowe (skierowane w konkretnym kierunku)
LE_Shock - światło pulsujące
LE_Disco - światło dyskotekowej kuli
LE_SpotLight - efekt "LE_StaticSpot"
LE_NonIncidence - światło o zbliżonym natężeniu na bardzo długim dystansie
LE_Shell - światło oświetlające jedynie okrąg zewnętrzny
LE_Interference - światło zmieniające kształt (poprzez migotanie)(
LE_Cylinder - świeci równomiernie na całej długości
LE_Rotor - światło obracającego się wiatraka
LightType:
LT_None - wyłączone
LT_Steady - standardowe
LT_Pulse - pulsujące
LT_Blink - migotające
LT_Flicker - migotające szybciej
LT_Strobe - stroboskopowe
LT_SubtlePulse - pulsujące niezupełnie

Dla każdego z pomieszczeń wybieramy jakiś efekt.
Pierwsze pomieszczenie: "Color" - czerwony, "LightEffect" - LE_Interference.
Drugie pomieszczenie: "Color" - niebieski, "LightEffect" - LE_FireWaver, "LightType" - LT_SubtlePulse, "LightPeriod" - 128.

Mgła

Między nowymi pomieszczeniami ze światłami, wycinamy pomieszczenie o wymiarach 1024x4096x4096.
Pomieszczenie ma być umieszczone tak, aby wchodziło się do niego z naszego pierwszego pomieszczenia.
Odległość od innych pomieszczeń ma wynosić 128 jednostek.
Następnie wklejamy kształt o wymiarach 128x3968x4096 i ustawiamy go przy samej podłodze, tak aby był odsunięty od drzwi wejściowych o 128 jednostek.
Następnie tworzymy ścianę o wymiarach 896x64x3584 i jeden z jedną z jej krawędzi przesuwamy o kolejne 448 jednostek w prawo.
Następnie w prawym dolnym rogu umieszczamy sześcian o boku 128.
Do niego dołączamy standardowe schody o parametrach 32x16x128.
Teraz, mając już wejście do wielkiego pomieszczenia umieszczamy w nim ok 20 skrzyni, w sposób chaotyczny.
Na środku pomieszczenia umieszczamy światło o następujących właściwościach:
"LightColor" -> "LightBrightness" - 64, "LightHue" - 0, "LightSaturation" - 255.
"Lighting" -> "VolumeBrightness" - 255, "VolumeRadius" - 160.

Strefę oddzielamy płaszczyzną w miejscu schodów i umieszczamy e niej "ZoneInfo", któremu nadajemy właściwość "bFogZone" - true.
Efekt mgły nie działa m.i. dla najbardziej popularnego trybu graficznego Direct 3D Support.

Źródła światła

Kolejną istotną rzeczą jest umieszczenie źródeł światła jak lampy, czy pochodnie.
Każde pomieszczenie, które jest oświetlone musi posiadać źródło światła.

Lampy na sufitach

Na środku podstawowych pomieszczeń, umieścimy po jednym świetle na suficie.
Wybieramy teksturę "Mine.Floor.mFloor", tworzymy kształt o wymiarach 16x96x96 i umieszczamy pod sufitem.
Następnie klikamy "AddSpecialBrash" (Add Special Brash) i wybieramy "Invisible Collision Hull" i odznaczamy "Invisible".
W ten sposób tworzone są lampy na większości map, co sprawia iż w rzutach technicznych mają one kolor brązowawy,
ewentualnie używana też jest opcja "MaskedDecoration" również z odznaczonymi wszystkimi opcjami.
W rzutach mają kolor zielony.
Można też wklejać kształty lamp metodą standardową, o kolorze niebieskim (jak inne wklejane obiekty).
Następnie zaznaczamy teksturę "Mine.Light.mmlight3", tworzymy kształt 8x64x64 i umieszczamy pod powyższym.
Następnie zaznaczamy naszą lampę (dolną część) i nadajemy jej właściwość "Unlit" (niezależna od światła).
Aby nadać naszej lampie łunę umieszczamy zaraz pod nią światło o następujących właściwościach:
"Display" -> "DrawScale" - 0.3, "Skin" - GenFX.LensFlar.softlens2, "Lighting" -> "bCorona" - true.

Lampę razem z łuną kopiujemy do kolejnego pomieszczenia.

Lampy na ścianach

Następnie wybieramy teksturę "utcrypt.Base.nxnxbase", ustawiamy kształt 32x16x8 i umieszczamy ją na ścianie,
za drzwiami prowadzącymi do pomieszczenia z mgłą. Otaczającym światłom ustawiamy kolor niebieski.
Zaznaczamy przednią część lampy i nadajemy jej teksturę "utcrypt.Light.bluxlamp13".

Również i jej nadajemy łunę w sposób adekwatny do poprzedniego przypadku
(można też skopiować poprzednią łunę i zmienić jej kolor na niebieski).

Nietypowe źródła światła

Następnie przechodzimy do pomieszczenia z pulsującym niebieskim światłem i robimy postument.
Wklejamy postument o wymiarach 160x64x64. Dolne wierzchołki rozsuwamy tak, aby podstawą stał się kwadrat o boku 192.
Ustawiamy teksturę "RainFX.Rmetl2".
Następnie robimy zarys 1024x192x192 nad naszym postumentem. Następnie nakładamy go na nasz postument i klikamy "Deintersect" (deintersect). Uzyskujemy kształt z wycięciem w dolnej części. Umieszczamy go tak, aby wystawał z sufitu 32 jednostki.
Tworzymy movera, a na postumencie umieszczamy triggera, który go aktywuje i zgniata osobę, która wskoczyła na postument. Dla triggera "Display" -> "DrawType" ustawiamy - DT_Spirite, "Style" - translucent, "Teksture" - Botpack.ASMDAlt.ASMDAlt_a00.
Polu "Advanced" -> "bHidden" przypisujemy wartość - False.
Następnie przechodzimy do pomieszczenia z czerwonym światłem.
Na dole i górze umieszczamy walce o wymiarach 16x128 o ośmiu bokach. Łączymy je kształtem o wymiarach 512x64.
Następnie klikamy "AddSpecialBrash" i wybieramy opcje "MaskedDecoration" ("Non Solid", wszystkie opcje odznaczone).
Wklejamy obiekt i przypisujemy mu teksturę "UnrealShare.Belt_fx.RedShield".
Teksturę dopasowujemy tak, aby jak najbardziej współgrała ze światłem.
Przedstawione przykłady mają na celu jedynie obrazować możliwości, a nie przedstawiać gotowe rozwiązania,
toteż do przedstawionego efektu można mieć pewne zastrzeżenia.

Paleniska (pochodnie)

Następnie tworzymy zarys o wymiarach 512x384x386 i jeden z jego boków zawężamy do 192 jednostek.
Wycinamy taką wnękę miedzy pomieszczeniami, oraz po przeciwnej stronie.
Następnie tworzymy walec o wysokości 64x128 o 8 bokach i umieszczamy je wewnątrz wnęk.
Teraz tworzymy zarys walca o wymiarach 16x64 i wycinamy wgłębienie na środku wcześniej wklejonych form.
Zrobimy 2 przykłady pochodni.
W pierwszym przypadku wybieramy pochodnie z przeglądarki obiektów ("Lights" -> "TorchFlame") i umieszczamy
w naszej fomie między pomieszczeniami.
W drugim przypadku tworzymy przecinające się płaszczyzny o parametrach: 256x64x4.
Klikamy "Add Special Brash" i wybieramy "Masked Decoration" zostawiamy zaznaczoną opcje "Masked" i klikamy "OK".
Następnie wklejamy nasze palenisko na planszę. Dla ścianek ustawiamy i dostosowujemy teksturę "NaliFX.TORCHES3".
W opcjach zaznaczamy "Masked", "Translucent" i "Unlit".

Strefa bólu (śmierci)

Dookoła naszych palenisk układamy 4 płaszczyzny o wymiarach 512x136 tworzące równoległobok.
W środku umieszczamy "ZoneInfo" z właściwościami "bPainZone" - True, oraz "DamagePerSec" - 5.
Następnie nasz czerwony "słup" otaczamy w ten sam sposób płaszczyznami o wymiarach 512x72 i "ZoneInfo" nadajemy właściwościami "bPainZone" - True, oraz "DamagePerSec" - 1000.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Dźwięki / Ciecze

Wstęp

W tym rozdziale omówione zostaną ciecze i światła. Zagadnienia zostały połączone przez wzgląd na występujące powiązania.
Przy wszelkiego rodzaju cieczach umieszczane są elementy, odpowiedzialne za odtwarzanie dźwięku.

Z dźwiękami zetknęliśmy się już w rozdziale "Movery / Triggery", w którym to dźwięk wystąpił, jedynie jako cecha movera.
W tym rozdziale zostanie przedstawiony niezależny od niczego element, odpowiedzialny za odtwarzanie dźwięku,
nieustannie podczas trwania rozgrywki.

Dźwięki

Dźwięki dzielimy na 2 grupy. Pierwszą z nich, są dźwięki odtwarzane jednorazowo, przy wykonywaniu danej czynności.
Takie dźwięki stosowaliśmy dla krańcowych punktów wind czy drzwi.
Drugi rodzaj to dźwięk zapętlony - odtwarzany na okrągło podczas trwania danej czynności.
Tego typu dźwięki ustawialiśmy dla samego ruchu wind czy drzwi.
Cechą wspólną dźwięków nadawanych do tej pory było przypisywanie ich do działania czasowego konkretnych elementów.

Aby umieścić niezależny dźwięk, odtwarzany nieustannie, z przeglądarki elementów wybieramy "KeyPoint" -> "AmbientSound".
Ten element jest umieszczany w pewnych miejscach, dla oddania realizmu płynącej wody, wiatru, działania maszyny itp.
Tego typu dźwięki zawsze są dźwiękami zapętlonymi.
Przeglądarkę dźwięków otwieramy ikoną sound.

Na początek możemy umieścić takie elementy przy naszych paleniskach w pomieszczeniu drugim.
Umieszczamy "AmbientSound" w środku ognisk, przypisując im następujące właściwości:
"Sound" -> "AmbientSound" - AmbAncient.Looping.afire1, "SoundPitch" - 64, "SoundRadius" - 48, "SoundVolume" - 190.

Właściwości dźwięku

"AmbientSoundProporties" -> "Sound"
SoundPitch - ton
SoundRadius - zasięg
SoundVolume - głośność

Woda

Robimy kolejne pomieszczenie duplikując pomieszczenie pierwsze.
Wycinamy 4 baseny o wymiarach 256x512x512. Na te stykające się ze ścianą, 16 jednostek poniżej powierzchni podłogi, nakładamy płaszczyzny i wstawiamy do nich "ZoneInfo", ustawiając właściwość "bWaterZone" - true.
Płaszczyzny tworzymy poprzez "Add Special Brush" -> "Water".

Dla pierwszego basenu (tego w rogu) ustawiamy dla powierzchni teksturę "Liquids.Liquid9".
Do środka wstawiamy światło o właściwościach: "LightBrightness" - 48, "LightHue" - 127, "LightSaturation" - 191

Do środka basenu wstawiamy "KeyPoint" -> "AmbientSound" i nadajemy właściwości:
"Sound" -> "AmbientSound" - AmbOutside.Looping.Stream3, "SoundPitch" - 64, "SoundRadius" - 64, "SoundVolume" - 32.

Kwas

Powierzchni drugiego basenu przypisujemy teksturę "hubeffects.Goop3".
Do środka wstawiamy światło o właściwościach: "LightBrightness" - 32, "LightHue" - 63, "LightSaturation" - 127
Aby zrobić dodatkowo efekt gęstej cieczy (nie działający dla "Direct 3D Support") można ustawić "VolumeBrightness" - 128 oraz "VolumeRadius" - 12 (nie zapominając o "bFogZone" - true).

Do środka basenu wstawiamy "KeyPoint" -> "AmbientSound" i nadajemy właściwości:
"Sound" -> "AmbientSound" - AmbAncient.Looping.aslime2, "SoundPitch" - 64, "SoundRadius" - 64, "SoundVolume" - 64.

Lawa

Na trzeci basen nakładamy powierzchnię "Add Special Brush" -> "Water" i odznaczamy "Transparent".
Nakładamy na tę powierzchnię teksturę "hubeffects.LavaBEF" i zaznaczamy wartość "Unlit". Dla dna również ustawiamy teksturę lawy i zaznaczamy wartość "Unlit". Następnie 4 jednostki od ścian basenu ustawiamy zwykłe płaszczyzny,
o wymiarach 240x512, którym również zaznaczamy opcję "Unlit".
Następnie do basenu wstawiamy "Info" -> "ZoneInfo" -> "LavaZone".
A we właściwościach zony ustawiamy "DamagePerSec" - 300.

Do środka basenu wstawiamy "KeyPoint" -> "AmbientSound" i nadajemy właściwości:
"Sound" -> "AmbientSound" - AmbAncient.Looping.lava33a, "SoundPitch" - 64, "SoundRadius" - 64, "SoundVolume" - 64.
Nad lawą umieszczamy światło o właściwościach: "LightBrightness" - 128, "LightHue" - 21, "LightSaturation" - 127.

Kanał

Na czwarty basen nakładamy normalną powierzchnię i przypisujemy teksturę "DecayedS.Mask.dmesh3m".
Następnie na spodzie, przy przeciwległych ścianach, układamy dwa obiekty o wymiarach 32x512x96.
Nadajemy im teksturę "DecayedS.Floor.Aisle".
Dla dna wybieramy teksturę "Liquids.Liquid7" i nadajemy jej właściwość "U-Pan", tak aby powstało złudzenie płynącej wody.
Do środka kanału wstawiamy "KeyPoint" -> "AmbientSound" i nadajemy właściwości:
"Sound" -> "AmbientSound" - AmbOutside.Looping.Stream2, "SoundPitch" - 64, "SoundRadius" - 64, "SoundVolume" - 64.
W środku umieszczamy światło o właściwościach: "LightBrightness" - 32, "LightHue" - 148, "LightSaturation" - 64.
Na końcu tworzymy zarys o wymiarach 8x254x254 i ustawiamy go 4 jednostki nad płaszczyzną, tak aby nie stykał się z żadną powierzchnią.
Klikamy "Add Special Brush" i wybieramy "Invisible Collision Hull".

Wodospad

Robimy zarys walca o wymiarach 256x64x46 o 8 bokach.
Nadajemy teksturę "UTtech1.base.cbnubase2b" i wycinamy tak, aby ze ściany wystawały 32 jednostki naszego zarysu.
Następnie w naszym walcu wartość "Hollow" przestawiamy na true i wklejamy dokładnie w to samo miejsce.
Wkładamy do środka jakieś delikatne światła, aby lekko oświetlić wodę wewnątrz.
Tworzymy płaszczyznę o wymiarach 256x72 i ustawiamy ją w środku walca.
Wodospad możemy zrobić na dwa sposoby:
  • Tworzymy płaszczyznę pionową 239x72 i ustawiamy ją dokładnie 1 jednostkę od rury, oraz 0.5 jednostki
    od powierzchni basenu.
  • Tworzymy prostopadłościan o wymiarach 16x72x16 i przerabiamy go na pierwszą część wodospadu.
    Następnie tworzymy prostopadłościan o wymiarach 207x72x8 i przykładamy go dokładnie do końcówki pierwszej części pochyłej. Wszystkim płaszczyzną wody nadajemy teksturę "Liquids.Liquid7", skalowanie 0,25x8
    i właściwości "Translucent", "Two Sides" oraz "V-Pan".
    Gdyby woda lała się w złym kierunku przechodzimy do zakładki "Alignment" i wciskamy "Flip V".
    Jeśli któraś część wody nie leje się w odpowiednim kierunku, wchodzimy w jej właściwości,
    naciskamy "Unalign", obracamy teksturę i ustawiamy ponownie skalowanie.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Teleporty

Standardowy

W pierwszym pomieszczeniu ustawiamy "NavigationPoint" -> "Teleport" -> "VisibleTeleport".
Wartość "Event" -> "Tag" ustawiamy na - t1. A wartość "Teleport" -> "URL" na - t2.
W pomieszczeniu z przełączanymi światłami ustawiamy teleport. Dla pola "Tag" nadajemy wartość - t2, a dla pola "URL" - t1.
Dla teleportu z pierwszego pomieszczenia, możemy przypisać wartości TargetVeliocity: X - 590, Y - 610 , Z - 800,
dzięki czemu osoba wyskakująca z tego teleportu, poleci wprost na skrzynie na środku pomieszczenia.

Właściwości teleportu

"(Visible) Teleporter Proporties" -> "Teleporter"
bChangesVelocity - zmiana prędkości wyjścia
bChangesYaw - uwzględnienie różnicy kierunków wyjścia teleportów
bEnabled - wejście aktywne
TargetVelocity - nadanie prędkości wzdóż osi X, Y, Z (dla "bChangesVelocity" - true)
URL - "Tag" teleportu docelowego

Niewidoczny

Na dnie pomieszczenia z kwasem umieszczamy "NavigationPoint" -> "Teleport".
Wartość "Event" -> "Tag" ustawiamy na - t3. A wartość "Teleport" -> "URL" na - t4.
Na górze, za środkową windą, ustawiamy teleport. Dla pola "Tag" nadajemy wartość - t4, a dla pola "URL" - t3.

Niestandardowy

Ustawiamy niewidoczne teleporty, w rogach pierwszego i drugiego pomieszczenia
(przypisujemy wartości jak w powyższych przykładach).
Ustawiamy "Display" -> "DrawType" - DT_Spirite, "Style" - translucent, "Teksture" - SpaceFX.worm3d.
"Advanced" -> "bHidden" - False.

Strefowy

Robimy wycięcie o wymiarach 128x1024x128 w trzecim pomieszczeniu.
Na jego końcu i na końcu wycięcia w 2 pomieszczeniu, robimy z boku wycięcia o wymiarach 128x128x256.
128 jednostek przed końcową ścianą wstawiamy płaszczyzny dzielące zony.
W środku umieszczamy "Info: -> "ZoneInfo" -> "WarpZoneInfo".
We właściwościach pierwszego zona uzupełniamy pola "ThisTag" - wz1, "OtherSideURL" - wz2.
We właściwościach drugiego zona uzupełniamy pola "ThisTag" - wz2, "OtherSideURL" - wz1.
Nie zaleca się robić teleportujących zonów na otwartych przestrzeniach z powodów:
  • Nieprzenikanie rażenia broni między zonami
  • Zatrzymywanie niektórych rodzajów ataków:
    "ImpactHammer", "ChainSaw", "Enforcer", "ShockRifle"(1 tryb), "PulseGun (2 tryb)", "Minigun", "SniperRifle"
  • Nieprzenikanie oświetlenia
  • Możliwość zabicia się poprzez teleportacje

Mapa

Kliknij TUTAJ aby pobrać mapę.


Szyby

Niezbijalne

Robimy kolejne pomieszczenie duplikując jedno z poprzednich. 240 jednostek od ściany, ustawiamy ramę na nasze szyby.
Robimy 4 wycięcia o wymiarach 480x480 i wstawiamy płaszczyzny wybierając "Add Special Brush" -> "Transparent Window".
Dla każdej z płaszczyzn nadajemy odmienną teksturę z paczki "GetIn.Glass".
Za każdą z tych tekstur wstawiamy "Invisible Collision Hull" o wymiarach 479x479, tak aby nie stykał się z niczym.

Zbijalne

Robimy kolejną ścianę o wymiarach 512x1776x32. Robimy w środku wycięcie o wymiarach 480x1744x32.
Wstawiamy pionowe belki, dzieląc ramę na 4 okna o wymiarach 480x416.
Tworzymy na boku "TransparentWindow" o wymiarach 480x416, oraz ustawiamy przy niej "Invisible Collision Hull".
Następnie obejmujemy wszystko zarysem i naciskamy "Intersect" (intersect).
Z powstałego kształtu tworzymy movera i nadajemy mu poniższe właściwości:
"Mover" -> "bDamageTriggered" - true, "bTriggerOnceOnly" - true, "MoveTime" - 0,
"MoverEncroachType" - ME_IgnoreWhenEncroach.
"Object" -> "Initial State" - TriggerOpenTimed.
Miejsce, w które przesunie się mover ustawiamy w niedostępnym dla graczy miejscu.

Za szybą wstawiamy "Effects" -> "ExplodingWall" -> "BreakingGlass".
"ExplodingWal" -> "GlassTeksture" - GenIn.Glass.Glass, "bTranslucentGlass" - true.
"Collision" -> "CollisionHeight" - 0, "CollisionRaidus" - 0.
Polu "BreakingGlass" -> "Tag" przypisujemy - break_glass, a dla "Mover" -> "Event" również - break_glass.

Warto również zwrócić uwagę na fakt, iż w zależności od ustawienia punku centralnego movera
(punktu, do którego prowadzi odcinek z "BreakingGlass"), szyba może nabrać dodatkowych właściwości.
Jeśli punkt jest umieszczony w nieprzenikalnej części movera ("Invisible Collision Hull"), to szyby takiej nie można stłuc polem rażenia Redeemera i Shocka.
Jeśli punkt jest ustawiony poza nieprzenikalną częścią, to naszą szybę można stłuc polem rażenia, od strony punktu centralnego movera.
Nie zaleca się mieszania tego typu właściwości. Szyby tłuczone polem rażenia z jednej strony, można zastosować w przypadku, kiedy dane szyby mogą zostać rozbite jedynie z jednej strony.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Niebo

Niebo

Gdzieś poza mapą robimy wycięcie 512x2048x2048.
Nadajemy mu teksturę "genfluid.sky.Skyblu".
Górnej ścianie nadajemy właściwości "U-Pan" i "V-Pan".
4 jednostki od górnej ściany, umieszczamy płaszczyznę o wymiarach 2016x2016 oteksturowaną "genfluid.sky.Skytst6b".
Tej płaszczyźnie przypisujemy właściwości "Translucent", "Two Sided", oraz "V-Pan".
Obracamy tekstury na płaszczyznach, oraz ustawiamy skalowanie zgodnie z uznaniem.

Na środku wstawiamy niebieskawe światło z efektem "LE_NonIncidence".
Poniżej światła wstawiamy "Info" -> "ZoneIno" -> "SkyZoneInfo".
Z pomieszczenia 3 usuwamy lampę. Robimy wycięcie w suficie o wymiarach 64x512x512.
Obudowujemy belkami o wymiarach 32x32x512.
Płaszczyzną naszego nieba nadajemy właściwość "Fake Backdrop".
Pod całością możemy ustawić płaszczyznę razem z niewidoczną nieprzenikalną, tak jak nad kanałem.
Pod niebem umieszczamy "AmbientSound" i nadajemy mu wartości:
"Sound" -> "AmbientSound" - AmbOutside.Looping.wind22, "SoundPitch" - 64, "SoundRadius" - 64, "SoundVolume" - 190.
Światłom w pobliżu okna zmieniamy kolor na niebieskawy.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Boty

Scieżki

Boty w UT (nie licząc momentów walki) poruszają się po ścieżkach wyznaczanych elementami "NavigationPoint" -> "PathNode".
Elementy zaleca się umieszczać od siebie w odległości 250 - 550 jednostek.
Wszelkiego rodzaju "Inventory" są częścią ścieżek, w związku z czym nie należy dodatkowo umieszczać "PathNode'ów" obok elementów z "Inventory".

Ścieżki można w pełni utworzyć z poziomu edytora. Można również użyć modu PathLogic, dzięki któremu może uda nam się przyspieszyć, tę nieco monotonną czynność.
"PathNode" działa w taki sposób, że kiedy przemieszczamy się po mapie on automatycznie pozostawia elementy "PathNode".
W grze działanie moda kontrolujemy komendami w konsoli:
"PathNode 0" - domyślnie ustawiony tryb manualny. W celu postawienia PathNode'a należy w konsoli wpisać "DropPathNode".
"PathNode 1" - automatycznie stawia elementy PathNode co 350 jednostek.
"PathNode 2" - automatycznie usuwa elementy PathNode, przez które przebiegniemy.

Po zakończeniu pracy i opuszczeniu gry ujrzymy ramkę, w której klikamy w pole "Make Path Map".
Przechodzimy do edytora, w którym to z meny wybieramy opcje "Import" i z katalogu Maps ładujemy plik "PLMap.t3d",
zaznaczamy opjcę "Import into existing map".

Windy

Przed wejściem na windę umieszczamy elementy "LiftExit" a na samej windzie "LiftCenter".
W polach "LiftExit" -> "LiftTag", oraz "LiftCenter" -> "LiftTag" wprowadzamy nazwę windy (movera).

Jeśli winda ma się przemieszczać również w poziomie, to wartość pola "LiftCenter" -> "MaxZDiffAdd" należy ustawić na - 400.

Kicker

Od pomieszczenia 3 robimy wycięcie o wymiarach 512x1024x512. Tylną ścianę rozciągamy w górę o kolejne 678 jednostek.
Wycięcie dzielimy ścianką. Wklejamy wzniesienie o wysokości 512. Wstawiamy elementy "LiftExit" tak jak przy windach.
Element "LiftCenter" umieszczamy u góry, a na dole wstawiamy "Triggers" -> "Kicker" o właściwościach:
"bKillVelocity" - True, "KickVelocity" - X=0,Y=300,Z=1000, "Events" -> "Event" - kick_snd.
Nad "Kicker'em" umieszczamy element "Triggers" -> "SpecialEvent" o właściwościach:
"Events" -> "Tag" - kick_snd, "SpecialEvent" -> "Sound" - UnrealI.Pickups.BootJmp.
Z "Kickerami" często są problemy jeśli chodzi o zachowanie botów, w związku z czym czasem trzeba pokombinować,
przesuwając poszczególne elementy. Kicker'a od pozostałych rzeczy w tym rozdziale różni to,
że nie jest jedynie informacją dla botów, ale i elementem użytecznym również dla ludzi.

Skok na młotku

Po drugiej stronie ściany tworzymy wzniesienie o wysokości 256 i umieszczamy elementy "LiftExit".
Na górze umieszczamy element "NavigationPoint" -> "LiftCenter" -> "JumpSpot".
Polu "LiftCenter" -> "LiftTag" ustalamy wartość - impact_jump (taką samą jak elementom "LiftExit").
Polu "JumpSpot" -> "bImpactJump" nadajemy wartość - True.

Testowanie

Po utworzeniu wszystkich elementów warto sprawdzić, czy boty potrafią bez większych problemów z nich korzystać..
Usuwamy PlayerStarty i rozmieszczamy po 2 nowe, w każdym z 4 pomieszczeń i 1 w pomieszczeniu z "TriggerLight'em".
Odpalamy tryb "Team Game" z 5 botami w naszej drużynie i przywołujemy je do siebie "V" -> "Orders" -> "Cover Me".
Jeśli boty przybiegły, to wybieramy "Freelancing". Ustawiamy się w miejscu, do którego boty muszą się dostać
za pomocą windy, kickera, młotka... i ponownie wybieramy "CoverMe". Za pomocą klawisza F5 przełączamy widok,
pomiędzy graczami danego teamu, co w tym przypadku może być pomocne.

Mapa

Kliknij TUTAJ aby pobrać mapę.


Edytor 2D

Menu górne

Zawiera wszystkie opcje, które zostały przypisane odpowiednim nagłówkom.
Jego używanie jest zbędne ponieważ te same funkcjonalności dają nam opcje reprezentowane przez ikonki graficzne.

Listwa górna

new shape

Tworzenie formy

open shape

Otwieranie formy

save shape

Zapisywanie formy

rotate 90 degree

Obrót w lewo o 90 stopni

rotate 45 degree

Obrót w lewo o 45 stopni

flip vertically

Przerzucenie w pionie

flip horizontally

Przerzucenie w poziomie

scale up

Powiększ (przeskaluj) obiekt

scale down

Pomniejsz (przeskaluj) obiekt

zoom in

Przybliżenie widoku

zoom out

Oddalenie widoku

split segment

Stworzenie wierzchołka w połowie odcinka

delete

Usunięcie wierzchołka

linear segment

Prostowanie odcinka

bezier segment

Wyginanie odcinka

create sheet

Tworzenie płaszczyzny o kształcie formy

revolved shape

Tworzenie obiektu, poprzez obracanie formy wokół zielonego punku
("Per 360" - ilość segmentów na pełny obrót, "Use" - ilość użytych segmentów)

extruded shape

Tworzenie wielościanu o prostpoadłych podstawach ("Depth" - głębokość obiektu)

extude to point

Tworzenie ostrosłupa o podstawie formy ("Depth" - głębokość obiektu)

extude to bevel

Tworzenie ostrosłupa ściętego o podstawie formy
("Depth" - głębokość (w przypadku nieścinania), "Cap Height" - poziom odcięcia)

Przemieszczanie

PPM: przemieszczanie się
LPM: przemieszczanie wierzchołków
CRTL + LPM: grupowanie elementów

Wzniesienie narożne

Tworzymy taki kształt, jaki ma podstawa w rogu, w pomieszczeniu czwartym.
Zielony punkt ustawiamy na wierzchołku kąta prostego naszej formy i klikamy "Extude to Bevel" (Extude to Bevel) i ustawiamy wartości "Depth" - 96, "Cap Height" - 64.

Uwaga

Edytor 2D lubi się czasem zaciąć, uniemożliwiając jego dalsze używanie. W takiej sytuacji należy ponownie kliknąć na jego ikonkę na listwie górnej (lub wybrać z menu głównego).

Mapa

Kliknij TUTAJ aby pobrać mapę.


Dekoracje

Charakterystyka

Elementy dekoracyjne znajdują się w głównej zakładce "Decoration".
Znaczna część elementów z tej listy jest możliwa do użycia.
Każda dekoracja posiada właściwości, które można dowolnie zmieniać w celu uzyskania pożądanego efektu.
Są dekoracje niestandardowe posiadające cechy, których nie można przypisać innym przedmiotom.
Przykładowo "SludgeBarrel" (beczki z kwasem), "DeadChairMale" za rozbijalnymi szybami czy "CrucifiedNali" zawieszony nad wejściem.

Przesuwalność

Aby uczynić element przesuwalnym, właściwość "Decoration" -> "bPushable" ustawiamy na - True.
Należy mieć na uwadze, że przesuwać będziemy element dopiero wtedy, kiedy będzie na tyle wysoki, że nie będzie można na niego wejść.

Przenikalność

W celu uczynienia obiektu przenikalnym, ustawiamy "Collision" -> wszystkie pola - Fasle.
W przypadku ustawienia nieprzenikalności ("Collision" -> wszystkie pola - True) dla dekoracji utworzy ona niewidoczny obszar, który będzie nieprzenikalny. Gabaryty dekoracji nieprzenikalnej ustawiamy poprzez "Collision" -> "CollisionHeight", "CollisionRadius".
Możemy podejrzeć jak duży obszar zrobiliśmy poprzez kliknięcie prawym przyciskiem myszy w pasek jednego z czterech okien, na którym znajdują się ikony i wybrać "Actors" -> "Radii View".
Jeśli natomiast mamy obiekt o kształcie nie zbliżonym do kuli i efekt nieprzenikalności kulistej nasz nie satysfakcjonuje, to czynimy dany obiekt nieprzenikalnym, a w jego wnętrze wstawiamy kilka elementów "Keypoint" -> "BlockAll", którym nadajemy odpowiednie parametry nieprzenikalności, tak aby w sposób realistyczny oddawały nieprzenikalność obiektu.

Dla niektórych dekoracji parametry przenikalności są ignorowane.

Ruch obrotowy

Aby uczynić obiekt obracający się wokół własnej osi, nadajemy mu następujące właściwości: "Advenced" -> "bStatic" - False, "Movement" -> "bFixedRotationDir" - True, "Physics" - PHYS_Rotating, "RotationRate" -> "Yaw" - np. 3000

Cechy obracalności możemy zastosować również dla zwykłego movera.
Jeśli chcemy, aby nasz mover obracał się względem jednego z wierzchołków ściany zewnętrznej zaznaczamy mover i klikamy jeden z jego wierzchołków zewnętrznych.

Ruch obiegowy

Wiemy już jak zrobić obiekt, obracający się wokół własnej osi (ewentualnie punktu należącego do krawędzi).
Natomiast teraz dowiemy się jak zrobić obiekt obiegający jakiś punkt.
W tym celu tworzymy zwykły obiekt, o kształcie naszego movera.
Następnie ustawiamy zarys tak aby zawierał w sobie nasz obiekt, oraz żeby środek zarysu wyznaczał punkt obiegany. Klikamy "Intersect" (interest) uzyskując w ten sposób nasz mover.
Ustawiamy mover w odpowiednim miejscu i nadajemy mu właściwości takie same, jak elementowi który obraca się wokół własnej osi.

Mapa

Kliknij TUTAJ aby pobrać mapę.

Podsumowanie



Należy mieć na uwadze, że kurs nie przedstawiał sposobu zrobienia dobrej mapy, a jedynie prezentował informacje,
dzięki którym można ją zrobić. Pamiętajcie, że tworzenie mapy powinno być poprzedzone pomysłem.

W pierwszej kolejności warto tworzyć pomieszczenia, a na zakończenie rozmieszczać zaopatrzenie.
Pozostałe kroki należy realizować, pomiędzy tymi dwiema krańcowymi czynnościami.
Skończonej mapie wybieramy najlepsze ujęcie, z którego robimy screena.
Wprowadzamy nicka, nazwę, ilość graczy i muzykę.

Nie należy przedobrzyć pod względem ilości zaopatrzenia, czy PathNode'ów użytych na ścieżki dla botów.
Robiąc mapę nie należy mieszać styli. Połączenie klimatu nowoczesności, czy wręcz przyszłości,
z atmosferą starodawną, raczej nie przyniesie korzystnego, harmonijnego rezultatu.

Niezalecane również jest przesadne mieszanie styli otwierania drzwi, rodzaju światła, teleportów itp...
Elementów dekoracji należy używać sporadycznie i z wyczuciem, albo nie używać wcale.
Warto pamiętać o dźwiękach, aby na mapie nie było zbyt cicho (graczom z wyłączoną muzyką),
jednak należy również mieć na uwadze, aby poszczególne dźwięki zbytnio się nie pokrywały.

Dziełem powstałym podczas tego kursu jest mapa DM-MappingCourse. Mapa przedstawia,
przykładowe rozmieszczenie zapatrzenia, oraz screena prezentującego ją w samej grze.

Warto również wiedzieć, iż istnieje możliwość kopiowania elementów poprzez ich zaznaczenie i wciśnięcie "Ctrl+C",
oraz wciśnięcie "Ctrl+V" n mapie docelowej. Elementy zostaną przesunięte o 32 jednostki wzdłuż każdej osi.
Nie należy kopiować elementów innych twórców. Tego typu praktyki są stosunkowo łatwo zauważalne.

Jeśli przeszliście cały kurs i ogarnęliście wiedzę na temat robienia map, warto wydać owoc swojej nauki w postaci mapy.
Jeśli uda wam się coś stworzyć, nic nie stoi na przeszkodzie, aby pokazać swą produkcję światu,
umieszczając ją na stronie poprzez formularz umieszczony na samym dole działu z mapami.