NEWS | ČLÁNKY | DOWNLOAD | GUESTBOOK | TUTORIALS ObnovitZavřít
 
hl - ZONE Half-Life Half-Life 2 Half-Life 3
 
Episode One Episode Two Opposing Force Blue Shift Counter-Strike 1.6
 INFO
Přidat do oblíbených
Nastavit jako Homepage

ICQ: 272-515-771 
Aktualizace:

 SYSTÉM
 TLAČÍTKA
hl-ZONE Button 1
 
hl-ZONE Button 2
 SPOLUPRACUJEME
 Výtah Pondělí 27. 03. 2006
<-- Rotační objekty Otočný výtah -->

Minule jsme si vytvořili celkem kvalitní větrák, který jsme roztočili a jak jsem již naznačil, dneska se podíváme na další pohyblivé objekty, které se budou posouvat z jednoho místa do druhého.

Na úvod:
Hned na úvod prozradím, že k tomu požijeme entitu func_train, která je vhodná pro tvorbu všeho co se má pohybovat po nějaké dráze. Od různých pístů, plošin nebo dokonce dveří až po výtahy. A to bude právě náš příklad. Dneska si vytvoříme jednoduchý výtah, který bude jezdit nahoru a dolů, podle toho, kde si ho aktivujeme.

Ve VHE je pro tvorbu výtahu k dispozici speciální entita func_plat, ale její použití jsem v praxi nepoužil a popravdě ani moc neviděl. Výtah se v podstatě může vytvořit mnoha různými způsoby a myslím, že by nebyl problém použít i entitu func_door a do kolonky Lip nastavit takovou hodnotu, aby výtah jezdil tak jak má (a v originálních mapách v Half-Life je to několikrát použito). Ale abych příliš neodbočoval.

Co k tomu tedy budeme potřebovat? Pochopitelně nějakou místnost a dvě úrovně podlahy (pokud nechápete, pochopíte). Dále několik tlačítek (pro ovládání a přivolání výtahu) a samozřejmě samotný výtah, tedy již zmiňovanou World Entitu func_train. Nakonec použijeme ještě entitu path_corner pro definování startovní a cílové polohy výtahu.

Místnost:
Opět vynechávám tvorbu místnosti, ale přikládám pár obrázků, jak by zhruba měla vypadat. Je totiž nutné, aby byla rozdělená na dvě poloviny, kde první bude o něco níž než druhá (tento "schod" budeme překonávat pomocí výtahu). Také vše nějak osvětlete a umístěte info_player_start.


Obr. 1
Naše místnost

Obr. 2
Naše místnost

Obr. 3
Naše místnost

Také by bylo dobré aby tam, kde bude náš výtah (do předu podotýkám, že půjde o obyčejnou plošinku) byla podlaha vyříznutá, aby plošina mohla zajet až do podlahy a být zároveň s ní. A také nějakou ocelovou konstrukci, která bude výtah jistit (pochopitelně, že jde pouze o doplňky, které dělají mapu bohatší a propracovanější). Třeba pomůže následují obrázek.


Obr. 4
Dekorace okolo výtahu

Výtah jako func_train:
Tak, místnost máme hotovou a můžeme se pustit do tvorby samotného výtahu. Nejprve si řekneme základní údaje. Takže, plošina bude veliká 128x96x8 jednotek (výška je podle toho, jak hluboko jsme si vyřízli podlahu) a také by to chtělo nějaký válec (neboli píst), který bude naši plošinku zvedat nahoru nebo dolů. Ten bude 32x32 jednotek a výšku nastavíme podle rozdílu obou podlah. V mém případě to bude 176 jednotek.

Takže si ho pojďme vymodelovat. Dnes žádný model nepřikládám, jelikož je to velmi jednoduché a zabere to několik vteřin. Vybere texturu třeba GENERIC015A a uděláme brush 128x96x8 jednotek. Boky můžeme otexturovat třeba STRIPES2. Poté vybereme Block Tool [Shift+B] a vpravo se přepneme na Cylinder. Počet Faces nechám na vás, ale hodnota 8 si myslím stačí. Takže uděláme brush o velikosti zmiňovaných 32x32x176 a co se nestalo? Místo kvádru nám vznikl válec:-) Přesuneme ho doprostřed plošinky a je to. Výtah je hotov. Následuje ho převést na entitu a nastavit.

func_train - záložka Class_info:
Name: jméno entity, pomocí kterého se na ni odkazujeme
Global Entity Name: globální jméno, které se používá pokud je třeba držet informace o entitě ve více mapách najednou
First Stop Target: jméno path_corneru, kde bude výtah začínat
Move Sound: zvuk, který bude výtah vydávat, když se bude pohybovat
Stop Sound: zvuk, který se přehraje vždy, když zastaví
Speed (unit per second: rychlost, kterou se bude výtah pohybovat
Damage on crush: počet healthů, které vám budou ubrány, když vás skřípne
Sound Volume 0.0 - 1.0: hlasitost zvuku, který výtah vydává
Minimum light level: hodnota minimální nasvícení entity

func_train - záložka Flags:
Not solid: entita nebude pevná, takže se skrze ní bude moci procházet

A náš výtah si nastavíme následovně:

func_train - záložka Class_info:
Name: vytah
First Stop Target: pc_start
Move Sound: vyzkoušejte a nějaký nastavte
Stop Sound: vyzkoušejte a nějaký nastavte
Speed (unit per sekond): 64
Damage on crush: 50
Sound Volume 0.0 - 1.0: 0.5
Minimum light level: 0.2

Výtah je hotový. Chybí však cesta po které se má pohybovat. Tu vytvoříme pomocí Path_Cornerů. Takže si do mapy hned dva umístěte. Je důležité je umístit tak, aby byly vždy ve prostřed entity func_train takže to bude chtít trochu přemýšlet a také otestovat, zda vše sedí. Parametry entit jsou:

path_corner - záložka Class_info:
Name: jméno entity, pomocí kterého se na ni odkazujeme
Next Stop Target: jméno path_corneru, který bude následovat po aktuálním
Fire on Pass: slouží k definici nového path_corneru, pokud dojde k přehození vyhybky (tímto parametrem si nejsem 100% jistý)
Wait here (secs): doba, kterou bude pohybující se entita čekat na tomto místě než bude pokračovat dál (k dalšímu path_corneru)
New Train Speed: nová rychlost pohybující se entity
New Train rot. Speed: nová rotační rychlost pohybující se entity, pokud se entita (func_train) otáčí

path_corner - záložka Flags:
Wait for retrigge: pokud je zaškrtnuto, path_corneru na tomto místě zastaví a čeká na další spuštění triggerem (tlačítkem, ...)
Teleport: pokud je zaškrtnuto, na další path_corner se entita přesune okamžitě, nikam najede
Fire once: nejsem si jistý, ale myslím, že to má něco společného s Fire on Pass a znemožňuje to vrátit hodnotu původního path_corneru; ale je to opravdu bez záruky:-)

Takže to byla troška teorie a teď zpátky k naší mapě. Až path_cornery umístíte nastavte je následovně:

path_corner 1 - startovní pozice:

Name: pc_start
First Stop Target: pc_cil

Wait for retrigge: zaškrtneme, jinak by výtah jezdil sem a tam a my bychom nemohli vystoupit

path_corner 2 - cílová pozice:

Name: pc_cil
First Stop Target: pc_start

Wait for retrigge: zaškrtneme, jinak by výtah jezdil sem a tam a my bychom nemohli vystoupit

Na následujícím obrázku je výtah a oba path_cornery. Pro to aby jste je mohli vidět je obrázek v režimu Wireframe.


Obr. 5
Výtah a path_corners

Tak, vše máme hotovo. Výtah i cestu, kudy se má pohybovat. Zbývá pouze doplnit tlačítka, kterými budeme výtah přivolávat a obsluhovat.

Tvorba tlačítek:
Tlačítko jsme vytvořili již několikrát, takže to vezmu velmi rychle. Vytvořte brush o velikosti 16x4x16 a umístěte ho někam ke zdi. Na jeho povrch umístěte texturu nějakého tlačítka (třeba +0BUTTON03) a převeďte na entitu func_button, kterou nastavte dle libosti. Jediné co je důležité nastavit je položka Target, do které napište jméno našeho výtahu, tedy vytah. Poté ho umístěte někam dolů, zkopírujte a přesuňte také nahoru, abychom ho mohli ovládat i ze shora.

Tip01:
Na úplný závěr jsem si nechal jeden tip. Je to velmi důležitá věc, tak radím, abyste si ji přečetly. Pokud mapu zkompilujete a máte vše nastaveno dobře, tak vám výtah bude jezdit, tak jak má. Je tu ale jiný problém: mapa je přesvícená. Respektive na ní nejsou žádné stíny (podobné jako když do mapy zapomenete vložit světlo). Je to způsobeno tím, že část našeho výtahu a jeden path_track jsou mimo viditelnou část mapy (tedy v prostoru, který se nazývá VOID). Mimo viditelnou část mapy se nesmí nacházet žádná entita, jinak vzniká LEAK a mapu nerozeběhnete vůbec nebo tak, jak sem uvedl. Náš problém vyřešíte jednoduše: okolo výtahu a entity umístěte nějaký brush nebo protáhněte podlahu dolů, tak aby vše zakryla.

Na tento fakt se často zapomíná, takže si to zapamatujte: žádná entita nesmí být ve VOID jinak mapa nebude správně fungovat!!!

Závěr:
Tím jsme se prokousali až na samotný závěr. Vytvořili jsme plošinu (nebo výtah), který jezdí od jednoho patch_corneru k druhému a zase zpět. Jak bylo řečeno není to jediný způsob jak výtah vytvořit, ale myslím, že jde o nejpoužívanější. A také jsme se naučili něco o samotné entitě func_train, která, jak bylo řečeno, se může použít pro tvorbu všeho možného, od pístů až k pohybujícím se cílovým bodům pro paprsky (tohle začátečníci nepochopí, ale mám v plánu se o tom v nějakém z příštích tutoriálů zmínit).


Obr. 6
Výtah nahoře

Obr. 7
Výtah jede nahoru

Takže, když umíme vytvořit klasický výtah, nebylo by marné se podívat na výtah, který se bude během své jízdy otáčet kolem osy Z, nebo-li rotační výtah. K tomu použijeme entitu func_platrot a možná se i zmíním o entitě func_plat. To je pro zatím vše a přeji pěkný zbytek dne.

 

SOUBORY

 

KOMENTÁŘE

 

hAssassin (email: voker@email.cz)

Filous > Tohle je dost obtížný. Nejjednodušší je si stáhnout Developer Kit Spirit of Half-Life, kde každá entita (nebo alespoň většina) má v nastavení parametr Move With, kam se zadá jméno entity, se kterou se má daná entita pohybovat. Problém je v distribuci mapy, popřípadě módu.

Další možností je, že např. světlo se umístí do výtahu v jeho startovní pozici a kabinu nasvítí, což postačuje. Dveře, které se otevrou, zavřou a pojedou s výtahem požadovaným směrem, se dělají pomocí entity func_train a definuje se jim přesně dráha pomocí path_corner. Tlačítko je také lehké udělat. Stačí udělat fyzické tlačítko, které bude součást výtahu a skutečná tlačítka budou dvě, jedno ve startovní pozici a druhé v pozici cílové, jako entita func_button s texturou INVISIBLE, takže nebude v mapě vidět.

To je asi vše. Triků je pochopitelně daleko víc a někdy je těžký na ně přijít a promyslet, ale na druhou stranu to je celkem jednoduchý... Stačí si to představit...:-)

Odpovědět


Filous (email: filous@centrum.cz)

Chtěl bych se zeptat, jak udělám entitu součástí výtahu (dveře, světlo, tlačítko), nebo nějaký fígl, kterým se to dělá (ve hře dost příkladů). Mimochodem, dobrej tutoriál, takových by mělo být víc.

Odpovědět


 

 

<-- Rotační objekty Otočný výtah -->

NAHORU ...

 ČERSTVÉ NOVINKY
 POSLEDNÍ TUTORIÁLY
 ANKETA
Staré ankety
 REKLAMA