Hra Bechon umožňuje širokou škálu změn levelů, grafiky, zvuků a celkového pojetí emzáků. Tento stručný návod by měl pomoci orientovat se v definicích těchto hodnot.
Verze souboru je z 7.2.2006
Program pro konverzi modelů z formátů .ASE a .3ds na .mesh:
ModelConv.exe.
Levely
Všechno kolem levelů - počty a chování emzáků, bonusy, hlášky a atmosféra jsou nastavitelné přes xml soubory v adresáři levels\.
Filosofie souborů je postavena na nadřazenosti zapsaných údajů. Pokud je v základním souboru events.xml u emzáka hodnota životů nastavena na 200, ale v levelu je mu přidělena hodnota 100, platí hodnota 100.
Soubory spawns, events a level používají na nejspodnější úrovni stejný zápis údajů a pracují tedy se stejnými údaji pro vytvoření předmětu. Např. život můžem zapsat v events.xml jako základní hodnotu, ve spawns.xml zadat rozdílné hodnoty pro jednotlivé emzáky - třeba první ve vlně je silnější, a v některém patře jim všem ze skupiny nastavit lehčí úroveň.
Soubory levelů se ještě liší tím, že mohou obsahovat definice událostí, sad emzáků či animace.
Postupně si projdem všechny soubory:
- events.xml - definice událostí - vytvoření emzáků, bonusů a ostatních.
- spawns.xml - definice sad emzáků - např. že se objevují dva naráz.
- animations.xml - soubor s pohybem emzáků.
- level_X.xml - hlavní soubor každého patra.
- mass.xml - definice masívů pro náhodná patra.
events.xml
Soubor obsahuje definice událostí pro vytvoření základních hodnot. Můžem jej chápat jako aliasy pro později volané události, zprostředkovává pro nás tedy základní komunikaci mezi xml soubory a programem.
Data jsou seznamem
event prvků, parametr
name - jedinečné jméno pod kterým budeme tuto událost volat později z levelů.
Podíváme se na příklad emzáka Houba:
<event name="MZhouba" event="emzak1" param="houba">
<score>64</score>
<life>32</life>
<Position z="180.00000"/>
<Speed z="-1.00000"/>
<RotationSpeed z="1.00000"/>
</event>
Emzák houba má jednoznačný název MZhouba.
Parametr
event určuje, která událost v programu se použije, emzak1 vyvolává základní událost pro standartní emzáky, která umožnuje načíst jakýkoliv model a texturu uložené v adresáři models\emzaci1. O této události si povíme později.
Některé události z event mají možnost zadat další parametry, obvykle oddělené čárkou. V tomto případě je pro událost emzak1 poslán parametr
param houba.
Defaultní hodnotou skóre za zabití je 64.
Defaultní hodnotou života je 32.
Defaultní pozice je 180bodů nad aktuálním středem ve chvíli vyvolání.
Defaultní rychlost houby je Z = -1. Rychlost v Bechonu je standartně 1 bod po ose Z. Takže emzák, který by měl vizuálně stát na místě, by měl mít rychlost po Z = 1. Víme tedy, že emzák houba po vytvoření bude rychle padat dolů (rychlostí 3*60, tedy 180 bodů za sekundu).
Defaultní rychlost rotace je Z = 1, rychlost je udávána v počtu stupňů, takže emzák rotuje kolem osy Z celkem svižně (60 stupňů za sekundu).
Seznam všech zadávaných hodnot bude k dispozici později.
spawns.xml
Soubor obsahuje definici sad, nebo skupin emzáků. Samotný soubor začíná zdánlivě nesrozumitelným kódem, leč jedná se o kopii zdrojového kódů, ukazující možnosti zadávání náhodných hodnot.
Data jsou rozdělena na skupiny
spawntype, ty pak na prvky
spawn. Každý spawn prvek vytváří další kopii použité události.
Údaje v souboru říkají programu, kolik kopií událostí se má vyvolat a může také upravovat všechny jejich údaje. Pomáhá nám zadávat více stejných naráz - řady, dvojice a další útvary mající stejné chování.
Podíváme se na příklad skupiny CoupleLeft:
<spawntype name="CoupleLeft" rand="1">
<spawn addtime="0">
<position x="-300" y="2" z="200" />
</spawn>
<spawn addtime="0">
<position x="-200" y="2" z="200" />
</spawn>
</spawntype>
Skupina obsahuje opět jednoznačný a jedinečný název,
CoupleLeft. Z názvů plyne, že půjde o dvojici objevující se vlevo.
Parametr
rand programu říká, že může tuto skupinu použít v náhodných patrech již od 1. levelu.
Skupina obsahuje dva
spawn prvky. Proberem si ten první.
Parametr
addtime uvádí v počtu framů od prvního vyvolání, kdy se má událost objevit. Je nastaveno 0, tedy ihned.
Parametr
position uvádí pozici. Údaj je vždy od aktuální pozice středu obrazovky (X 0, Y 0, a Z se pohybuje).
Z obou parametrů spawn je vidět, že první emzák bude na X -300, druhý o 100 bodů doprava, tedy na -200. Oba se objevi současně.
V každé skupině
spawntype můžeme definovat stejné údaje jako v events, v každém prvku
spawn také, přesto to doporučuji nepoužívat, pouze v případě, že by to nešlo jinak.
animations.xml
Soubor obsahuje definice animací - pohyby a chování emzáků. Tento soubor se liší od prvních dvou v tom, že používá jinou sadu parametrů k nastavení.
Data jsou rozděleny na skupin
animations, obsahující prvky
anim, tedy jednotlivé změny - animační klíče. Všichny objekty ve hře jsou animovány ve standartní rychlosti 60 snímků ve vteřině.
Pozice snímků je odpočítávána ihned od vytvoření emzáka, události se provádějí v posloupnosti s tím, že některé delší, lze kdykoliv přerušit další událostí.
Podíváme se na příklad animace IntroBecher - láhve Becherovky pod herním menu:
<animations name="IntroBecher">
<anim smooth="1">
<Speed x="2.1" y="0" z="1"/>
</anim>
<anim frame="290" smooth="1">
<Speed x="0" z="1"/>
</anim>
<anim frame="500" smooth="1">
<Speed x="2.1" z="1"/>
</anim>
</animations>
Skupina obsahuje jednoznačný a jedinečný název -
IntroBecher.
Obsahuje 3 animační klíče.
První neobsahuje parametr
frame, takový prvek je spuštěn ihned po vytvoření, podobně jako kdyby obsahoval honodotu 0.
Anim bez udání
typu upravuje rychlost emzáka. Je třeba opět brát zřetel na to, že rychlost pohybu kamery je konstatní, tedy 1 po ose Z. Událost, která by vizuálně měla stát na místě, musí tedy mít také rychlost 1.
První prvek tedy nastavuje, že událost se bude pohybovat s kamerou konstatní rychlostí a bude se pohybovat směrem doprava (X 2.1).
Druhý prvek, spouštěný 290 framů po vytvoření zastaví pohyb doprava.
Parametr
smooth určuje, že změna rychlosti bude postupná - všechny zde uvedené parametry se budou měnit postupně.
Třetí prvek, spouštěný 500 framů po vytvoření opět zavede pohyb doprava.
Výsledkem je tedy přílet láhve Becherovky zprava až těsně doprava, kde se na chvíli zastaví a pak opět pokračuje. Vzhledem k tomu, že se animuje změnou rychlosti, je třeba představivost a několik zkoušek.
Seznam typů animací pro jednotlivé prvky
anim bude přidán později.
Level_X.xml
V tomto souboru je definována posloupnost událostí v patře.
Může obsahovat všechny předchozí nastavení, která budou platná jen pro daný level - důležité pro možnost přidávat nové druhy emzáků, událostí a skupin bez ohledu na hlavní soubory hry.
V hlavičce každého souboru by měl být číselný parametr id shodný s číslem v názvu souboru.
Název levelu je již nepoviný, ale pro přehled by se měl uvádět.
Data v souboru jsou rozdělené na tři sekce: events, animations a spawns.
Events a animations mohou tedy obsahovat stejné data jako v defaultních souborech a mají před nima přednost. Data ve spawns mohou obsahovat dva typy prvků.
Spawntype - bude se tedy jednat o definici, nebo
spawn - jednotlivé události patra.
V levelu se nejvíce pracuje s parametry
time a
addtime,
UseType a
UseEvent. První dva určují čas kdy se má daná událost vyvolat a čaový posun od posledně definovaného prvku. Druhé dva určují typ ze spawns.xml a událost z events.xml.
Podíváme se na část ze souboru level_0.xml - nehratelné patro probíhající pod herním menu:
<spawn addtime="200" rand="3">
<UseType>IntroSpawn</UseType>
<UseEvent>MZrocketeer3</UseEvent>
</spawn>
<spawn time="100" />
<spawn addtime="700" repeat="10">
<UseType>IntroBecherovka</UseType>
<UseEvent>MZbecherovka</UseEvent>
<Position y="-14" />
</spawn>
Level 0 obsahuje celou sadu postupně jdoucích emzáků, jedná se o přehlídku, kdy jednotliví aktéři jsou oděleny časem 200. (něco málo přes 3 vteřiny).
První prvek je posledním z řady přehlídky, obsahuje parametr
addtime 200, tedy posun 200 framů od posledního.
Nultý level slouží programu také jako zdroj událostí pro náhodná patra. Parametr
rand tedy určuje, že se událost
MZrocketeer3 použije až od třetího náhodného patra.
Pro tuto událost bude použita sada
IntroSpawn, jejíž definici můžem nalézt v souboru spawns.xml. Dočteme se tam, že událost bude vyvolána vizuálně vlevo nahoře, bude mít rychlost kolmo dolů a bude používat animaci
IntroAnim,
kterou opět můžem nálezt v souboru
animations.xml. Podívate-li se do daného souboru, uvidíme poměrně složitou animaci, která ve výsledku vytváři onu přehlídku pod menu.
Jako poslední událost je použita
event MZrocketeer3. Na definici události se můžem podívat do souboru events.xml - standartní emzák ověšen raketama.
Nálsedující prázdný prvek, nebude vytvářet žadného emzáka ani vyvolávat jinou událost. Nastaví jen čas při načítání souboru zpět na 100.
Čteme-li v souboru dále, hned pochopíme proč.
Od času 100 následuje 10x po 700 framech (včetně první) láhve becherovky.
Nový prvek
repeat udává, kolikrát máme použít danou událost
MZbecherovka (events.xml) v sadě
IntroBecherovka (spawns.xml).
Pro všechny kopie je použitý parametr position upravující hodnotu Y na -14, becherovky jsou tedy trochu níže než je rovina hry.
Můžeme tedy zadávat události v kombinací prvků s parametry
time a
addtime. Posloupnost je důležitá jen pro úvodní načítání patra.
Level_0 je navíc omezen tím, že první události až po
spawn time="100" jsou použity jako zdroj událostí pro náhodná patra. Samotný program totiž nerozpoznává definované události v events.xml dobré od špatných, proto seznam emzáků, tedy nepřátel v prvním patře.
Chcete-li přidat nového emzáka tak aby byl použit v náhodných patrech, je třeba jej zadat do
events.xml a i do
level_0.xml
Soubor
mass.xml má stejnou syntaxy jako level_X soubory. Je použit jen pro náhodná patra jako seznam objektů v pozadí (tedy vraky lodí a shluky meteoritů).
Seznam typů animací:
- Bez typu - změna rychlosti objektu
parametr Speed - rychlost, jako Position, tedy mění hodnoty X, Y, Z nebo XYZ - všechny hodnoty naráz
parametr RotationSpeed - rychlost rotace ve stupních, jako Position, tedy mění hodnoty X, Y, Z nebo XYZ - všechny hodnoty naráz
parametr smooth - zda se má změna provést plynule nebo naráz.
- bonus - bonusová animace - objekt rotuje ve středu obrazovky.
- destroy - objekt je zničen
- freeze - objekt ustane v pohybu
- hunt - objekt honí lodě hráče(ů),
parametr tillnotcatch - objekt honí soupeře dokud jej nedožene
- linehunt - objekt se snaží dostat na stejnou hodnotu X jako hráč
parametr tillnotcatch - objekt honí soupeře dokud jej nedožene
- mbp, movebypos - objekt se jednorázově posune o hodnotu uvedenou v parametru MoveByPos
parametr MobeByPos - syntaxe jako u Position.
- mtp, movetopos - objekt se posune na pozici uvedenou v parametru MoveByPos
parametr MobeByPos - syntaxe jako u Position.
- melt - objekt se vrátí na původní rychlosti před zavoláním freeze
- slowhunt - stejné jako hunt, ale pomaleji.
- use - použije se další animace, název přečten z parametru UseAnim
parametr UseAnim - název další animace.
Událost emzak1:
Speciální událost umožňující načíst libovlný model z adresáře models\emzaci1\mesh\.
Jako parametr vstupuje název modelu, samotný soubor by měl vypadat ve tvaru
emzak_nazev.mesh.
Pokud v adresáři models\emzaci1\images\ existuje png soubor
emzak_nazev.mesh je použitý jako textura.
Pokud není, je použita textura
emzak_default.png.
Začíná-li název
m_, je jako default použita mixovaná textura
mdefault.png.
Parametr
param může obsahovat až několik parametrů oddělený čárkou.
První z nich je vždy název emzáka.
Nadále může obsahovat:
- Shield - emzák bude krytý štítem
- Číselná hodnota - energie štítu, hráč má štít s energií 1000
- Zbraň (seznam zbraní je třeba vyčíst z events.xml)
- frare, fslow, frapid - rychlost palby - občas, pomalu, rychle
Událost emzakX:
Speciální událost umožňující načíst libovlnou skupinu modelů jejichž definici nalezne v adresáři models\emzaciX\xmls\.
Jako parametr vstupuje název modelu, samotný soubor by měl vypadat ve tvaru
emzak_nazev.xml.
Struktura souboru je poměrně jednoznačná, jediný návod se může týkat parametru
together.
Pokud je nastaven na 0 nebo chybí, jedná se o složení emzáka z několika částí, které lze samostně odstřelovat. Přesto je emzák mrtvý až ve chvíli, kdy sestřelíme poslední část.
Pokud je nastaven na 1, jedná se o jednolitého emzáka tvořeného několika modely. I přesto lze nastavit jednotlivým částí některé specifika.
Samotné použití emzáka se pak řídí stejnými pravidly jako předchozí.