Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu

El Matador - deníček vývojáře

  12:00aktualizováno  16. srpna 11:24
V české akci El Matador hrajeme za agenta, který bojuje proti čtyřem drogovým kartelům v Kolumbii. Do zákulisí projektu můžete nahlédnout díky deníčku hlavního programátora Petra Smílka.

Úvod
El Matador Nazdar čtenáři. Řádky, které právě čtete začínají sérii neformálních článků, které vám (samozřejmě pokud vás to bude zajímat), přiblíží aktuální dění při vývoji hry El Matador. Jmenuji se Petr Smílek a pracuji na Matadorovi jako hlavní programátor (tohle bohužel není moje jediná role v teamu, ale o tom budu psát radši až někdy příště, zatím si můžete myslet, že jsme zcela standardní firma :-)) Nikdy jsem žádné developer diary nepsal (zatím), takže si zvolím formu, které mě právě napadla a připadá mi originální. Budu sám sobě klást otázky, na které si záhy budu sám odpovídat, takže to bude celé vypadat jako F.A.Q. Bude to mít jednu výhodu a to tu, že pokud vás otázka nebude zajímat, tak ji prostě přeskočíte a půjdete na další. Dobrá, můžeme začít.

Kolik programátorů na El Matadorovi dělá? Na čem konkrétně kdo pracuje?
Na El Matadorovi od začátku až doposud dělají tři programátoři. Já, Honza a Petr. Celou programátorskou práci máme rozdělenou na poměrně nezávislé oblasti, takže si nelezeme do zelí. Honza pracuje na většině kódu týkajícího se high-level AI (to co nepřátelé vidí, slyší a co na základě toho dělají) a implementuje front-end část hry (user interface, invenory management, implementing various entity types). Taky je primárním autorem skriptovacího systému, který používáme. Petr řeší fyzikální simulátor, detekce kolizí, low-level motion planning & obstacle avoidance + vehikly (auta, vrtulníky apod.). Já jsem implementoval engine, který tvoří jádro našich her.

Kolik má program El Matadora řádků?
No, ne že by to něco znamenalo, ale lidé se občas na takovéto věci ptají. Kvalitu programu ovšem neurčuje počet řádků, spíš to funguje tak, že čím více řádků, tím více prostoru pro chyby. Podle toho, co zobrazí program Line Counter (http://noeld.com/programs.asp?cat=misc), máme prostoru poměrně dost :-).

Global Summary (42.5 MB, actual: 36.4 MB)
--------------------------------------------------------
Total number of lines: 1663728
Total number of lines of code: 950566
Total number of empty lines: 329478
Total number of comment lines: 199224
Total number of empty comment lines: 184460
--------------------------------------------------------
5349 file(s) processed.

Můžem vědět něco o AI ve hře?
Když se řekne AI nepřátel je buď dobré nebo špatné, obvykle se tím myslí dojem, jakým na hráče nepřátelští agenti působí. V žádném případě nelze mluvit o nějaké skutečné inteligenci (i když vám to budou všichni vývojáři ve svých prohlášeních vehementně tvrdit). Ve skutečnosti totiž u akčních her nezáleží ani tak na tom co a proč který agent dělá (což jsou samo o sobě taktická rozhodnutí, která inteligenci vyžadují), ale především na tom, jakým způsobem to dělá (žádoucí je samozřejmě způsob co nejefektnější).

El Matador V El Matadorovi pro AI používáme poměrně standardní techniky a algoritmy. K implementaci takzvaného terrain-reasoningu (schopnost AI rozumět světu ve kterém existuje), využíváme sítě tzv. waypointů. Waypointy jsou body v prostoru, které mají v sobě a mezi sebou vypočítány informace potřebné pro pohyb agentů v prostoru a pro získávání taktických informací o okolním prostředí. (viditelnost mezi waypointy apod.) Waypointů je v levelu několik tisíc (N), takže abychom mohli udržovat informace pro NxN waypointů musí být tato informace značně komprimována.

Pro samotnou implementaci nepřátelských agentů používáme Finite State Machines (FSMs). Tyto FSM mají přímou podporu v našem skriptovacím systému, takže jejich zápis a práce s nimi je velice jednoduchá a efektivní. Každý agent se může nacházet v jednom z mnoha stavů (idle, search target, fight apod.) a určitému stavu odpovídá určité chování. Určité (low-level) části AI agentů jsou psány přímo v C++, ale určitá část je naprogramována ve skriptovacím jazyku, takže některé modifikace a zásahy do AI nevyžadují změnu hlavního programu.

Posledním prvkem, který využíváme a o kterém se zmíním jsou takzvané rule-based systémy. Tento systém nám umožňuje nadefinovat soubory pravidel (opět ve skriptu), pomocí kterých potom AI provádí rozhodování v určitých situacích.

Pro ilustraci výňatek ze souboru definice pravidel:
//#include "rules_defines.h"

OnSee
{
// See opponent ?

{
(in.ai_game_event_relationship == 1) && //
E_CG_RELATIONSHIP_OPPONENT
(!(in.ai_game_event_obj_flags & 1)) && //dead flag is not set
(in.ai_game_event_status == 1) && //
E_MEM_REC_STATUS_RECOGNIZED (in.ai_game_event_last_tact_event != 20) //
E_TACTICAL_EVENT_ON_SEE_OPPONENT
: out.ai_tactical_event_type = 20; //
E_TACTICAL_EVENT_ON_SEE_OPPONENT
out.ai_tactical_event_obj = in.ai_game_event_obj;
}

// See fighting friend ?

{
(in.ai_game_event_relationship == 2) && //
E_CG_RELATIONSHIP_FRIEND
(in.ai_game_event_obj_flags & 2) && //fight flag is set
(in.ai_game_event_status == 1) && //
E_MEM_REC_STATUS_RECOGNIZED
(in.ai_game_event_last_tact_event != 23) //
E_TACTICAL_EVENT_ON_SEE_FIGHTING_COLLEAGUE
out.ai_tactical_event_type = 23; //
E_TACTICAL_EVENT_ON_SEE_FIGHTING_COLLEAGUE
out.ai_tactical_event_obj = in.ai_game_event_obj;
}


Co skriptování? Kdo a jak skriptování realizuje?
Skriptovací systém je v dnešní době součástí každého vyspělého herního enginu. Některé enginy používají dostupné skriptovací systémy jako např. LUA, PYTHON apod., některé enginy včetně našeho používají vlastní skriptovací systém. Syntakticky je náš skriptovací jazyk odnož C++, s různými omezeními a naopak rozšířeními důležitými pro programování her (podpora FSM apod.).

V předchozím projektu byli nuceni level designéři v podstatě přímo k programování a to se všemi problémy, které k programování patří. Prvním problémem bylo zvládnutí syntaxe a osvojení si programátorského způsobu myšlení. Dalším a mnohem fatálnějším problémem byla délka cyklu “write - test – modify”. Pokud například chtěl designér změnit chování určitého agenta v levelu, musel otevřít příslušný skript, napsat část programu odpovídajícího novému chování. V tomto programu samozřejmě udělal nějakou syntaktickou chybu, což se dozvěděl až při opětovném spuštění hry, které trvalo minimálně 30 sekund :-(. Asi si dovedete představit, že pokud bylo v levelu 50 agentů, každý měl skript s pár stovkami řádků, na kterých často čekaly chyby, které bylo možné odhalit až v určitém momentu při hře, byla práce s tímto systémem velmi frustrující.

El Matador El Matador El Matador

Během vývoje El Matadora jsme přešli na zcela nový přístup ke skriptování. Základem současného skriptování event-based entitový systém. Každý objekt, který se nějakým aktivním způsobem podílí na hře má dle své funkce přiřazen tzv. entity class. Tato entita potom definuje množinu parametrů a události (events) objektu. Tento systém je velice podobný tomu, jaký používá Half Life 2.

Veškerá editace pro designéry potom probíhá vizuálně a zcela odstraňuje problémy se syntaktickými chybami a chybnými referencemi ve skriptech, protože designéři žádné skripty nepíšou. Efektivita skriptování se touto cestou mnohonásobně zvýšila. Stále existuje určitá část hry, která je psána přímo ve skriptovacím jazyku, ale tu udržují programátoři. Systém umožňuje rozšiřitelnost funkčnosti hry (přidání nových entit, rozšíření funkce entit apod.) bez nutnosti zásahu do programu. Naším cílem je vytvořit pokud možno co nejvíce data-driven architekturu, ale o tom jaké výhody přináší a jak konkrétně je realizována možná napíšeme zase příště.

To je pro dnešek všechno. S některými se možná uvidíme příště :-).

Autor:



Nejčtenější

Nejvtipnější chyby z českého hitu Kingdom Come: Deliverance

Kingdom Come: Deliverance

Kingdom Come je obrovská a propracovaná hra, ale její autory čeká ještě spousta práce při odlaďování mnoha chyb, které...

RECENZE: Kingdom Come naučí svět milovat českou historii

Kingdom Come: Deliverance

Nejočekávanější česká hra poslední dekády nezklamala. Je to sice o dost náročnější záležitost, než na jaké jsme si v...



Hrajete už Kingdom Come: Deliverance? Jak se vám zatím líbí?

Kingdom Come: Deliverance

Dnešní anketa je určena pro ty z vás, kteří už se ponořili do české hardcore hry na hrdiny Kingdom Come: Deliverance....

RETRO: Winter Challenge je i po 25 letech nejlepší herní olympiádou

Winter Challenge

Je to s podivem, ale i po čtvrt století od vydání zůstávají neoficiální zimní hry od Accolade tou nejlepší olympijskou...

Dosáhl maximální úrovně ve střílečce Call of Duty jen pomocí nožů

Call of Duty

Lidé se u počítačových her baví různými způsoby. Hráče s přezdívkou TheseKnivesOnly baví hrát střílečky bez toho, aby...

Další z rubriky

KOMENTÁŘ: Městská akce nemusí být jako GTA. Yakuza pohledem zelenáče

Yakuza 0

Herní série Yakuza bývá mnohými charakterizována jako japonská verze populárního Grand Theft Auta. Loňský prequel a...

Něco pro fandy World of Warcraft: rozdáváme pět sběratelek Legion

World of Warcraft

Aktuální expanze on-line hry na hrdiny World of Warcraft je na konci své cesty, do vydání další však zbývají měsíce....

Tactical Assault Commander Pro je mini klávesnice a myš k PlayStation 4

Tactical Assault Commander Pro

Tactical Assault Commander Pro je oficiálně licencované příslušenství k PlayStation 3 a 4, které výrazně usnadní hraní...

Chystáte se na hory?
Chystáte se na hory?

Pořiďte zímní výbavu rychle a levně. V našem bazárku najdete vše, co potřebujete na zimní radovánky.

Najdete na iDNES.cz