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
 Unikající pára Pondělí 08. 05. 2006
<-- Otočný výtah Teleport -->

Tak jsem opět zde. Sice jsem nedodržel slib z minulého tutoriálu, ale myslím, že jsem se již omlouval dost, takže tím zdržovat nebudu a přejdeme rovnou k věci. Dnes se podíváme konečně na něco co není moc složité a pěkně to vypadá. Dneska si vytvoříme páru unikající ze zdi.

Na úvod:
Ano, dneska se zaměříme na entitu env_sprite a vytvoříme si pěknou páru, která bude unikat z trubky a když se k ní přiblížíme, tak nás díky entitě trigger_hurt zraní. Pochopitelně, že díky ventilu budeme moci páru vypnout nebo opětovně zapnout. Příkladů z původního Half-Life je myslím víc než dost, takže věřím, že všichni víte o čem dneska bude řeč. Takže hurá na to!

Místnost s rourou:
Opět nám nezbývá nic jiného než začít tvorbou místnosti. Tu rychle přeskočím pouhým výpisem. Takže udělejte nějakou místnost (může být i úzká chodba), vhodně otexturujte, umístěte nějaké to světlo a entitu info_player_start. Může třeba vypadat jako na mém obrázku.


Obr. 1
Místnost

Nyní si vytvoříme rouru. Já zvolil texturu -1C1A4_FUEL. Vybere tedy texturu a vytvoříme brush o průměru 32x32 jednotek. Předtím než odentrujeme, tak se přepneme na cylinder. Počet Faces necháme na hodnotě 8 a teprve nyní stiskneme Enter. Tím jsme vytvořili válec. Myslím, že jsme ho už několikrát dělali, takže by to neměl být problém. Pokud je natočen jinak než požadujeme, překlopíme ho. Já potrubí trochu vylepšil a tak, aby část se lámala do pravého úhlu. Toho lze docílit pomocí Clipping Tool [Shift+X]. Také by bylo vhodné, aby místo, kde roura vstupuje do zdi byl nějaký úchyt. Ten vyřešíme tak, že trubku zkopírujeme, poloměr zvětšíme o 8 jednotek a výšku upravíme na 4 jednotky (ale každý podle svého v kusu). Na závěr někam na rouru umístíme malý brush o velikosti třeba 16x4x4. To bude výpusť páry. Pro jistotu přikládám obrázky mého potrubí.


Obr. 2
Systém potrubí

Obr. 3
Trubka u sktěny

Ventil:
Nyní si vytvoříme ventil, kterým budeme páru vypínat a opětovně zapínat. Takže si vytvoříme nějakou hřídel (můžeme zkopírovat naši výpusť) a umístíme ji na rouro (i když to není podmínkou). Nyní si může vybrat ze dvou možností. Ta první je vytvořit ventil manuálně, což je celkem pracné a zdlouhavé. Druhou možností je použít tzv. Prefab. Prefaby jsou již vytvořené objekty, které se do mapy pouze vkládají. Mnoho jich naleznete na internetu a pár jich je i ve VHE.

Takže si vpravo v roletce Categories vybereme položku Usable Objects a poté v roletce Objects jedno z připravených "kol" (tedy ventilů). Já zvolil Red Wheel, ale opět to je jen čistě na vás. Pak už stačí stisknout Insert original prefab a hle, ventil se vložil do mapy. Nyní ho jen přesuneme ke hřídeli. Zbývá umísti osu otáčení, tedy brush s texturou ORIGIN a můžeme náš ventil (i s brushem ORIGIN a klidně i hřídelí) převést na entitu func_rot_button, kterou nastavíme následovně.


Obr. 4
Vkládání prefabu

Targetted object: steam_mm
Sound: vyzkoušejte a nějaký nastavte
Speed: 50
Delay before reset: 8
Delay before trigger: 0
Distance (deg): 90

Toggle: zaškrtneme
Y Axis: vyzkoušejte samy, záleží kam a jak jste ventil umístili (možná že to u vás bude X Axis

Tip01:
Teď mě napadla jedna věc, kterou by bylo užitečné zmínit. Pokud jste si toho nevšimli již dříve. Jistě víte, že když vytvoříte nějaký objekt a zarovnáte na něm textury, tak vypadá pěkné. Pokud ho ovšem přemístíte jinam (nebo jeho kopii) tak se textury rozhází a vy můžete zarovnávat znovu. A to je na draka! Ve VHE existuje funkce, která textury zamkne k objektu na kterém jsou a když s ním hýbete, kopíruje tak se posouvají s ním a vy už nikdy nic nebudete muset znova zarovnávat. Pouze když objekt otočíte, třeba o 90°, tak se textura otočí také a v nějakých případech nemusí přesně sednout ke své sousední. To se dá vychytat pomocí Toggle texture application [Shift+A]. Uvádím to jen proto, že jsem si toho v začátcích mého snažení ve VHE nevšiml a jako debil jsem vše do nekonečna zarovnával. A abych nezapomněl, funkci naleznete v Tools -> Texture Lock, které zaškrtněte.


Obr. 5
Ventil

Pára:
Nyní, když máme hotový ventil, přejdeme k tvorbě toho nejdůležitějšího, páry. O co půjde? Jak jsem uvedl na začátku použijeme Point entitu env_sprite a to hned šestkrát. Jde o to, že jedna entita vytvoří oblak kouře (tedy páry), ale skutečná pára se postupně zvětšuje a rozptyluje ve směru, kterým uniká. Proto budeme muset pokaždé nastavit o něco jiné hodnoty a tím docílit opravdu realistické (alespoň jak je to možné v enginu Half-Life 1) páry.

Takže si do mapy vložíme entitu env_sprite a umístíme ji pár jednotek před výpusť. Poté vyvoláme tabulku Properties. Nyní popíšu základní parametry.

env_sprite - záložka Class_info:
Name: jméno entity, pomocí kterého se na ni odkazujeme
Render FX: způsob vykreslování spritu v mapě (podobné jako u chování světel)
Render Mode: způsob renderování spritu v mapě (použili jsme třeba u skla)
FX Amount (1-255): průhlednost spritu (čím menší hodnota, tím více průhledný)
FX Color (R G B): barva spritu ve formátu RGB (pokud chceme sprite manuálně dobarvit)
Framerate: počet snímků za sekundu
Sprite Name: cesta k souboru, kde je sprite uložený
Scale: měřítko spritu, pokud chceme jinou velikost

env_sprite - záložka Flags:
Start on: pokud zatrhneme, sprite bude v mapě aktivní hned po načtení
Play once: sprite se přehraje pouze jednou

To byl základní přehled parametrů entity env_sprite. Možná by bylo dobré vysvětlit co to Sprite vlastně je:

Tip02:
Sprity jsou v sekvence obrázků, které se přehrávají. Takže by se dalo říct, že to je něco jako animovaný GIF. V Half-Life se s nimi setkáváme téměř všude. Ať už jde o oheň, výbuchy, lasery, blesky, kouř a dá se říct, že i samotný HUD (tedy ukazatel zdraví a nábojů) je sprite. Nevýhodou toho je, že jsou pouze 2D, takže je vždy budeme vidět zepředu. Výhodou je, že pomocí jednoduchých prográmků není problém si takový sprite vytvořit. Stačí mít pár obrázků. Ještě uvedu, že je nalezneme ve složce valve/sprites a nebo v .pak souboru opět ve složce sprites.

Nyní se vrátíme k naší páře. Umístili jsme si první sprite a vysvětlili si základní parametry entity env_sprite a také to, co to sprite je. Nyní zbývá si popsat jak si nastavíme ten náš:

Name: steam1
Render FX: Constant Glow
Render Mode: Aditive
FX Amount: 80
FX Color: pokud chcete mít páru barevnou nastavte nějakou barvu
Framerate: 10.0
Sprite Name: sprites/xsmoke1.spr
Scale: 1
 
Start on: zaškrtneme

Máme hotový první sprite. Nyní ho zkopíruje. Každý nový sprite vždy posuneme o 4 jednotky dále od výpusti. Hodnoty upravíme následovně (uvádím pouze ty, které se mění):

Name: steam2
FX Amount: 68
Framerate: 14.0
Scale: 1.1

Name: steam3
FX Amount: 56
Framerate: 18.0
Scale: 1.2

Name: steam4
FX Amount: 44
Framerate: 22.0
Scale: 1.3

Name: steam5
FX Amount: 32
Framerate: 26.0
Scale: 1.4

Name: steam6
FX Amount: 20
Framerate: 30.0
Scale: 1.5

Logicky z toho plyne, že jméno vždy zadáme jiné, položku FX Amount vždy o 12 snížíme, Framerate naopak zvýšíme o 4 a Scale zvýšíme o 0.1. Pochopitelně, že záleží na vás jaké hodnoty nastavíte, ale po dlouhém zkoušení, experimentování a přečtení několika podobných tutoriálů jsem shledal tyto hodnoty jako ideální.


Obr. 6
Pára pomocí env_sprite

Nyní musíme vytvořit brush s texturou AAATRIGGER. Ten umístíme okolo páry a převedeme na entitu trigger_hurt. Poté zarovnáme a upravíme tvar tak, aby se co nejvíce podobal oblaku páry. Nyní popíšu parametry entity trigger_hurt:

trigger_hurt - záložka Class Info:
Name: jméno entity, pomocí kterého se na ni odkazujeme
Target: jméno entity na kterou se má odkázat pokud do ní vstoupíme
Damage: množství healthů, o které přijdeme, pokud do entity vstoupíme
Delay before trigger: prodleva v sekundách než nám začne ubývat energie
Damage Type: typ zranění, které se objeví (pomocí spritu) na obrazovce

trigger_hurt - záložka Flags:
Target once: pokud zatrhneme, bude se chovat podobně jako trigger_once, jinak se chová jako trigger_multiple (pochopitelně, že musíme mít zadané jméno entity na kterou se chceme odkazovat v kolonce Target
Start Off: entita po načtení mapy neaktivní
No Clients: po zaškrtnutí je entita pro hráče neškodná, na ostatní (lidé, vojáci, monstra) však platí

Naši entitu si nastavíme následovně:

Name: steam_hurt
Damage: 20 (ale klidně i víc)
Delay before trigger: 0
Damage Type: Burn

Nyní si to celé ještě trošičku zkomplikujeme. Pro více realističnosti by bylo dobré aby pára vydávala nějaký zvuk. Předem podotýkám, že to vezmu velmi hopem, jelikož o zvukách samotných chci napsat rozsáhlejší tutoriál. Takže zvuk do mapy umístíme pomocí entity ambient_generic. Ve VHE bude mít ikonku repráku. Umístěte ho někam k výpusti a hodnoty nastavte následovně:

Name: steam_sound
WAV name: ambience/steamjet1.wav
Volume: 5

Small Radius: zaškrtneme, aby se zvuk přehrával jen v bezprostředním okolí unikající páry


Obr. 7
Ikona ambient_generic

Multi_manager:
Vše je hotovo a připraveno ke kompilaci a spuštění. Zbývá však ještě jedna důležitá věc. Jistě jste si všimli že hodnota v položce Targetted Object u ventilu je nastavena na steam_mm. Takže když mapu spustíte, ventilem sice otočíte, ale nic se nestane a pára pojede dál. Proto do mapy vložíme Point entitu nazvanou multi_manager. Tato entita slouží jako spouštěč událostí. A to hned několika najednou.

Hlavní rozdíl oproti trigger_once je ten, že události, které chceme spustit nemusí mít stejné jméno a každé entitě můžeme nastavit čas, kdy se má aktivovat. Dalo by se tedy říct, že se jedna o "režiséra událostí". Snad pochopíte. Vložte ho tedy do mapy a vyvolejte položku Properties. A co to? Je zde pouze jedna kolonka a to Name. Znamená pochopitelně název multimanageru. Důležitější je tlačítko SmartEdit které stiskněte. Pod ním se objevily další tlačítka delete a add a dvě políčka Key a Value.


Obr. 8
multi_manager

Postup je jednoduchý. Klikněte na tlačítko add a do kolonky Key zadejte jméno entity, která se má spustit. A do kolonky Value pak číselnou hodnotu, která znamená čas, po kterém má dojít k aktivaci entity. Potvrďte OK. Pro náš případ si vše nastavíme následovně (píšu to ve formátu Key: Value):

Name: steam_mm
steam1: 0.5
steam2: 0.6
steam3: 0.7
steam4: 0.8
steam5: 0.9
steam6: 1.0
steam_hurt: 0.8
steam_sound: 0.5

Mapa je hotová. Nezbývá než zkompilovat a spustit. A vyzkoušet zda po otočení ventilem přestane postupně pára unikat, vypne se zvuk a trigger_hurt se stane neaktivní. Dalo by se říct, že jsme na konci dnešního tutoriálu, ale opak je pravdou. Já to přeci jen ještě rozšířím, abych si ještě trochu procvičili multi_manager.

Celé trochu jinak:
Napadla mě situace, kdyby nebylo zapotřebí žádného ventilu a pára by nešla vypnout. Ale vždy by byla po určitý čas zapnutá a na chvilku by se sama vypnula. A to by byl ten okamžik, kdybychom se mohli dostat dál. Pak by se opět pochopitelně zapnula. Co tedy musíme udělat? Vše necháme jak je. Vymažeme z mapy ventil a multimanager si přejmenujeme na steam_mm1 a klíče si upravíme následovně:

Name: steam_mm1
steam1: 3.5
steam2: 3.6
steam3: 3.7
steam4: 3.8
steam5: 3.9
steam6: 4.0
steam_hurt: 3.8
steam_sound: 3.5
steam1: 6.5
steam2: 6.6
steam3: 6.7
steam4: 6.8
steam5: 6.9
steam6: 7.0
steam_hurt: 6.8
steam_sound: 6.5
steam_mm2: 10.5

Poslední klíč napovídá o tom, že budeme potřebovat ještě jeden multimanager, který pojmenujeme, právě steam_mm2. Jeho jediný klíč bude steam_mm1: 0.0. Na úplný závěr je nutno vložit do mapy entitu trigger_auto, která zajistí spuštění prvního multimanageru a nastavit hodnoty takto:

Target: steam_mm1
Trigger State: Toggle

Remove On Fire: zaškrtneme

Nyní může zkusit zkompilovat a spustit a uvidíme, jestli vše funguje tak jak má.

Závěr:
Tak a jsme skutečně na úplném konci. Dneska jsem si vyrobili kvalitní realistickou páru, která sice nijak není v mapě důležitá, ale za prvé nám ji obohatí a o pěkný grafický prvek a za druhé, pokud umístíme ventil někam daleko, nám vytvoří logickou hádanku "Jak se asi dostanu dál? Musím vypnout páru.". A nebo nám poslouží k nalákání nepřátel a následovním usmažení (ostatně jak tomu bylo v Half-Life v levelu Lambda Core. Myslím, že si nějaké uplatnění u vás najde a snad jste dnešní tutoriál pochopili.


Obr. 9
Ventil a potrubí

Obr. 10
Unikající pára

Nezbývá než se rozloučit a slíbit, že další tutoriál se objeví o něco dříve než tento. Takže do příště ZDAR!

 

SOUBORY

 

KOMENTÁŘE

 

Žádné komentáře nejsou zatím k dispozici
 

 

<-- Otočný výtah Teleport -->

NAHORU ...

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