Úprava bota pro počítačovou hru Counter Strike

Podobné dokumenty
Boti ve First Person Shooter hrách

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Úvodem... 9 Kapitola 1 Karetních

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Manuál. k aplikaci WD FileAgent

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Knihovna XmlLib TXV první vydání prosinec 2010 změny vyhrazeny

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

SPY PHONE - Odposlech SMS. Návod k obsluze ( doplněk k originálnímu návodu )

8 Třídy, objekty, metody, předávání argumentů metod

ČÁST 1. Základy 32bitového programování ve Windows

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Kompletní manuál programu HiddenSMS Lite

Programování v C++ 1, 1. cvičení

Obsah. SEZNÁMENÍ S HRAMI V HTML Nové funkce HTML Nové funkce CSS

DUM 20 téma: Test dávky

RYCHLÝ PRŮVODCE INSTALACÍ

Programy na PODMÍNĚNÝ příkaz IF a CASE

JAK PROPOJIT R-KO a EXCEL aneb Aby se uživatel nasytil a statistik zůstal celý

Popis programu EnicomD

6 Příkazy řízení toku

Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek Šibenice ročníkový projekt Tadeáš Váša, 1E květen 2014

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Programování v C++ 2, 4. cvičení

PROJEKT MINY - DOKUMENTACE

Základy programování (IZP)

Komprimace/Dekomprimace

Specifikace projektu Ocerus

ZyXEL VMG8623. Návod na jednoduchou a rychlou instalaci modemu ZyXEL VMG8623-T50. Budoucnost je úžasná. Ready?

Dell UltraSharp U2917W Dell Display Manager Uživatelská příručka

Úvod do programování 6. hodina

Instalace produktu Ontopia. ver (open-source verze)

Pracovní list VY_32_INOVACE_33_19 Databáze Databáze Databáze Ing. Petr Vilímek

Mobilní zpravodajská aplikace idnes. A7B39PDA - Principy tvorby mobilních aplikací

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

ZyXEL VMG8823. Návod na jednoduchou a rychlou instalaci modemu ZyXEL VMG8823-B50. Budoucnost je úžasná. Ready?

DUM 06 téma: Tvorba makra pomocí VBA

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Dell UltraSharp U2417HA Dell Display Manager Uživatelská příručka

Práce se šablonami v MS Word MS Word 2007

Dokumentace ke knihovně InsDevice

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Synchronizace kontaktů z ESO9 do MS Outlook

1 Správce licencí Správce licencí Správce licencí Start > Všechny programy > IDEA StatiCa > Správce licencí Soubor > Správce licencí Licence

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Ing. Michal Martin. Spojení PLC CLICK s NA-9289

Windows 10 (5. třída)

programátorský manuál

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

Algoritmizace a programování

Konstruktory a destruktory

Programování v jazyce C a C++

ZyXEL modem. Návod na jednoduchou a rychlou instalaci modemu ZyXEL VMG8924-B30A. Ready? Budoucnost je úžasná.

REMARK. Perfektně popsaný záznam. Uživatelský manuál

LAN se používá k prvnímu nastavení Vašeho DVR a když potřebujete nastavit síť na Vašem DVR pro používání po internetu.

Windows 8.1 (5. třída)

UŽIVATEL, SKUPINA, PROCES

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Tabulkový procesor. Základní rysy

5. STRUKTURA PLC PROGRAMU

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

Internetová filmová databáze IFDB

Operační systémy. Cvičení 4: Programování v C pod Unixem

Uživatelská příručka k aplikaci Dell Display Manager

Překladač a jeho struktura

Výše uvedené soubory jsou zabalené v souboru R28txt (po rozbalení nakopírujte do základního adresáře textové verze programu tam, kde je program RECON.

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

PHP tutoriál (základy PHP snadno a rychle)

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

GDPR v aplikaci Nabídky Plus

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Bezdrátové routery LTE & UMTS datové a hlasové brány

Source Defender. PPJ semestrální projekt. Martin Přeták, ARI

Dell UltraSharp U2518D/U2518DX/U2518DR Dell Display Manager Uživatelská příručka

PRAKTICKÝ NÁVOD K POUŽITÍ PRO DGT XL

RYCHLÝ PRŮVODCE INSTALACÍ

Novinky v grafickém prostředí Marushka v ISÚI (leden 2019)

Programování v C++, 2. cvičení

Z. Kotala, P. Toman: Java ( Obsah )

Dokumentace programu piskvorek

MS Excel makra a VBA

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Algoritmizace a programování

Na základě Business Targets autora Simona Greenalla, vydaných nakladatelstvím Macmillan Heinemann English Language Teaching (Oxford).

Zadání soutěžních úloh

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Tiskový manažer Printman (Tiskový manažer verze 1.58 a novější)

Testovací protokol čipová karta ACOS5

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Komunikační driver Sauter EY2400. Reliance. Komunikační driver SAUTER EY2400 verze 2.4.3

Uživatelská příručka

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

Transkript:

Semestrální práce z ISW Úprava bota pro počítačovou hru Counter Strike Petr Povolný 20. 6. 2003 http://povolny.wz.cz/skola/isw

Obsah 1. ZADÁNÍ... 3 2. OBECNÉ INFORMACE... 3 3. JAK PODBOT FUNGUJE?... 4 4. ZMĚNY Z HLEDISKA UŽIVATELE UŽIVATELSKÁ DOKUMENTACE... 6 5. ZMĚNY Z HLEDISKA KÓDU PROGRAMÁTORSKÁ DOKUMENTACE... 7 6. ZÁVĚR... 10 7. PRAMENY... 11

1. Zadání Vytvořte zcela nového nebo doplňte již existujícího bota, do některé z následujících her: - Quake2 - Quake3 nebo mod Urban Terror - Counter Strike = mod pro Halflife Po předběžném prozkoumání možností a seznámení s jednotlivými hrami jsem chtěl pracovat na doplnění a vylepšení bota pro Urban Terror, protože se mi z nabízených her jevil jako nejhratelnější. Bohužel se nepodařilo získat jeho zdrojové soubory, a proto jsem nakonec pracoval na botu pro Counter Strike. Mým hlavním snažením bylo "naučit" tohoto bota pohybovat se ve dvojicích. 2. Obecné informace Boti pro Counter Strike existují jako dynamicky linkované (DLL) knihovny. Vývojář bota tak nemusí mít k dispozici kompletní zdrojový kód hry (modu), ale stačí zdrojové kódy DLL knihovny. Ta musí exportovat funkce, které potom volá hra. Pokud by chtěl někdo napsat kompletního bota od základu, musel by vědět, jak se tyto funkce musí jmenovat, aby komunikace mezi enginem hry a DLL knihovnou fungovala správně. Já jsem se však rozhodl pouze obohatit již existujícího bota, a proto jsem se nemusel těmito věcmi zabývat. Po prozkoumání situace na internetu jsem se rozhodl pro "rozšíření" bota pojmenovaného PODBot (Ping of Death Bot), konkrétně verzi PODBot26. Tento bot je volně dostupný na stránkách www.planethalflife.com/botman/. Na stejné adrese je k dispozici nepřeberné množství informací o tvorbě botů a to nejen pro Counter Strike. Archiv podbot26_src.zip Aresář Botman_Readme Obsahuje pouze soubor readme.txt, který obsahuje základní informace o tom jak bot funguje, jak zjišťovat informace se kterými chceme při vývoji pracovat apod. Adresář Podbot Obsahuje vlastní zdrojové soubory. Ty jsou uloženy v dalších několika adresářích: Common, Dlls, Docs, Engine, PM_SHARED. Z těchto adresářů jsem využil pouze adresář Dlls, který obsahuje Visual C++ projekt DLL knihovny. Soubor Readme_first.TXT

3. Jak PODBot funguje? Obecně Na začátku hry (každého kola) je provedena funkce BotSpawnInit(), která zinicializuje všechny potřebné struktury, popřípadě bota teprve vytvoří (pokud začíná úplně první kolo). Bot má na svoje akce každou vteřinu k dispozici 30 framů (ve smyslu časového úseku). Na začátku každého framu je spuštěna funkce StartFrame(), která volá pro každého bota funkci BotThink(), což je hlavní funkce inteligence bota. Právě funkce BotThink() se stará o zjišťování stavu bota (živý/mrtvý/zraněný) a provádění na něm závislých reakcí. V případě, že má bot zadány nějaké úkoly (tasky), stará se o jejich provedení atd. S trochou nadsázky se dá říci, že všechny ostatní klíčové funkce se volají v těle této rutiny nebo v tělech jí volaných rutin. Na konci kola je provedena funkce UpdateGlobalExperienceData(), která vyhodnotí úspěšnost bota a nastaví podle toho příslušné dovednosti, např. zaznamená nebezpečná místa, kde byl bot zabit. Jak boti komunikují? Základní prostředkem pro komunikaci jsou fronty zpráv. Existují funkce pro vložení zprávy do fronty a pro její vyjmutí. Zprávy mohou být adresné (pro konkrétního bota) nebo obecné a pracují asynchronně. Používané funkce: BotGetMessageQueue(bot_t *pbot) BotPushMessageQueue(bot_t *pbot,int imessage) BotCheckMessageQueue(bot_t *pbot) Úkoly Boti mohou mít zadány úkoly, které se snaží vyplnit. Například zadání (ve hře) požadavku "Cover me" použitím vysílačky vyústí v uložení zprávy do fronty pro všechny boty v "doslechu". Pokud některý z kolemstojících botů tuto zprávu "pozitivně" vyhodnotí, přidělí se mu úkol TASK_COVERME. Ten pak plní dokud není splněn nebo pokud mu není zadán další úkol. Všechny zadané úkoly se ukládají do zásobníku, což znamená, že bot vždy plní poslední zadaný úkol. Po jeho dokončení začne plnit předposlední úkol atd. Splnění úkolu může vypadat různě. Například u úkolu TASK_FOLLOWUSER (provádí radio-příkaz "Follow me") je vyhodnocováno, zda bot může svého kolegu stále následovat, tzn. jestli je naživu, jestli je v dohledu apod.

Používané funkce BotGetSafeTask(bot_t *pbot) BotPushTask(bot_t *pbot,bottask_t *ptask) BotRemoveCertainTask(bot_t *pbot,int itasknum) BotRemoveCertainTask(bot_t *pbot,int itasknum) BotTaskComplete(bot_t *pbot) Pohyb bota Bot má několik základních parametrů, které určují jakým směrem a jak rychle se pohybuje. Tyto parametry se v DLL vlastně jen nastavují jejich zpracování a "provedení" si pak zajišťuje přímo engine hry. Příklad float f_max_speed; float f_move_speed; float f_sidemove_speed; maximální rychlost bota se zbraní, kterou drží aktuální rychlost pohybu vpřed (vzad záporná hodnota) aktuální rychlost do strany (úkroky) Obecně se boti pohybují po předem známých "waypointech". Mají předdefinované útočné waypointy, obrané wypointy atd. pro každou mapu. Pokud tyto waypointy pro danou mapu neexistují, není ani možné boty do takové mapy přidat. Používané funkce BotFindWaypoint( bot_t *pbot ) GetValidWaypoint(bot_t *pbot) BotFindDefendWaypoint(bot_t *pbot,vector vecposition) BotFindCoverWaypoint(bot_t *pbot,float maxdistance) GetBestNextWaypoint(bot_t *pbot) Vlastnosti Bot má veliké množství vlastností a flagů. Ty jsou sdruženy ve struktuře bota bot_t. Příklad float fbaseagressionlevel; float fbasefearlevel; float fagressionlevel; float ffearlevel; boolean bdead; základní úroveň agresivity bota základní úroveň strachu bota aktuální úroveň agresivity bota aktuální úroveň strachu bota určuje, zda je bot ještě na živu Podle hodnot těchto atributů bot reaguje na většinu podnětů ze svého okolí, provádí rozhodnutí o svém pohybu, střelbě nebo vyhledává nejbezpečnější úkryt.

4. Změny z hlediska uživatele uživatelská dokumentace PODBot byl obohacen o týmový pohyb po dvojicích. Nová vlastnost se nazývá multibot. Pokud je tento mód aktivní (viz níže) boti se chovají následujícím způsobem: 1) Na začátku kola je vždy provedeno zpárování botů v každém z týmů. 2) Jeden z dvojice je leader ten se vlastně pohybuje normálně. Druhý z dvojice, tzv. follower se snaží svého leadra následovat. Pokud jej vidí pohybuje se po jeho boku nebo těsně za ním. Pokud leadra nevidí je jeho primárním úkolem najít jej. 3) Pokud je jeden z dvojice zabit, zbylý člen týmu pokračuje sám do doby než se mu naskytne možnost vytvořit nový pár. To je možné pokud zbude někdo z jiného páru nebo pokud je počet botů v týmů lichý. Instalace V adresáři hry HalfLife by měl existovat adresář cstrike. Do něj nainstalujte některého z podbotů, např. soubor pod25ins.exe. Tím se v adresáři cstrike vytvoří adresář PODBot. Do něj ručně nakopírujte soubory PODBot.dll a podbot.cfg z archivu multibot.zip (není podmínkou - v něm je pouze multibot přednastaven, aby se aktivoval ihned po startu). Aktivace vlastnosti multibot 1) konzolový příkaz Vepište do konzole (de/aktivuje se klávesou ~) příkaz "multibot on", pokud chcete vlastnost aktivovat. Pro její vypnutí použijte "multibot off". 2) soubor podbot.cfg V souboru podbot.cfg v adresáři podbot nastavte "multibot on/off" podle stejné logiky jako v konzole. Pokud použijete soubor podbot.cfg z archivu multibot.zip, stačí najít místo, kde je vlastnost multibot uvedena a nastavit ji na požadovanou hodnotu. Známé problémy Někdy se stane, že jeden pár pobíhá v jedné uzavřené oblasti, aniž by leader dvojice měl nějaký určitý směr. Jedná se o chybu vlastního bota a ne vlastnosti multibot, neboť toto chování se občas vyskytuje i při běžné hře v souvislosti s příkazem "Follow me". Při aktivaci vlastnosti multibot v průběhu rozehraného kola se teoreticky může stát, že se nespárují všichni boti, přestože jich je sudý počet. V takovém případě vepište do konzole příkaz "killbots" nebo "newround", což způsobí start nového kola a správnou aktivaci párů.

5. Změny z hlediska kódu programátorská dokumentace Práci jsem vyvíjel a testoval s následujícími verzemi softwaru: o Halflife 1.1.1.0 o Counter Strike 1.5 Full o instalace PODBota - pod25ins.exe o zdrojové soubory PODBota podbot26_src.zip Obecně Všechny úpravy, které jsem ve zdrojových souborech DLL knihovny provedl jsou uvozeny komentářem: // P.P. YYYY-MM-DD kde P.P. = Petr Povolný YYYY = rok (2003) MM = měsíc (06) DD = den (04-19) Více řádkové úpravy jsou ohraničeny zakomentovanými hvězdičkami, jednořádkové pouze výše uvedeným označením. Je tedy možné nechat si vyhledat všechny výskyty řetězce "P.P." a poté zkoumat pouze mnou provedené úpravy. Pro svou práci jsem do projektu knihovny přidal dva soubory: multibot.cpp a multibot.h. Upraveny byly následující soubory: bot.cpp, bot.h, bot_client.cpp, dll.cpp. Základním stavebním kamenem mého obohacení je doplněná funkce multibotspawninit(), která provádí párování botů. Detailní popis viz níže. Byl přidán úkol TASK_MULTIBOT, který dostane zadán bot, který následuje svého kolegu. Tento úkol používá stejně jako např. úkol TASK_FOLLOWME funkci BotFollowUser(), která však byla lehce upravena. Párové chování botů lze aktivovat/deaktivovat konzolovým příkazem "multibot on/off". Většina přidaného kódu pak začíná ifem, který zjišťuje, zda je multibot aktivován či nikoliv. Párové chování lze také nastavit v konfiguračním souboru podbot.cfg.

Úpravy multibot.h 1) deklarace struktury multibot typedef struct multibot_t { bool leader; // is the bot LEADER? bool searchingfollower; // is LEADER searching for FOLLOWER? int twin; // index of the multibot's TWIN } MULTIBOT; 2) deklarace rutin pro práci s botem 3) deklarace externích proměnných 4) #ifdef MULTIBOT_LOG pokud není zakomentováno, provádí se logování multibotí funkcionality do souboru multibot.log multibot.cpp 1) rutina pro inicializaci bota 2) rutina pro reinicializaci bota bot.h 1) deklarace dvou přidaných konzolových příkazů 2) deklarace dvou konstant pro označení úkolu MULTIBOT 3) obohacení struktury bot_t o atribut multibot 4) deklarace rutin pro párování botů a případné logování bot.cpp 1) přidání úkolu do pole úkolů taskfilters[] 2) funkce BotSpawnInit() (úprava) a. inicializace bota (alokace paměti) b. provedení párovací rutiny multibotspawninit 3) úprava (ve funkci BotCreate()) označení před jménem bota z [POD] na [M-B] pokud je multibot aktivní již při tvorbě jmen (načten z podbot.cfg) 4) BotFollowUser() (úprava) a. pokud je multibot aktivní, vyhodnocuje se pouze zda je leader ještě naživu b. nekontroluje se, jestli je leader v dohledu apod. jako při FOLLOWUSER 5) oddělení jednotlivých kol hry v případném logovacím souboru (funkce UpdateGlobalExpierienceData()) 6) BotCheckRadioCommands() (úprava) a. pokud je multibot aktivní, je nežádoucí používání příkazu "Follow me" b. tento radiový příkaz je sice volán, ale žádný z případných vykonavatelů jej nepřijme c. obyčejně bot tento příkaz přijímá s 50% pravděpodobností (náhodné číslo mezi 0 a 100 musí být menší než 50); v případě

aktivního multibota je místo prahu 50 nastaveno 1, čili podmínka nemůže být nikdy splněna 7) BotThink() (úprava) a. aktivace multibota za běhu - pokud dochází k aktivaci až v průběhu kola provádí se alokace paměti a inicializace na místě b. párování v průběhu kola pokud jednomu z dvojce byl zabit kolega, zbylý člen páru se snaží najít do dvojice jiného spolubojovníka c. task TASK_MULTIBOT provádí se pouze u botů, kteří následují, ne u leadrů; i. pokud není leader mrtev, pokračuje se v plnění úkolu ii. pokud leader není v dohledu, dostanou k vykonání úkol TASK_MOVETOPOSITION, který zajistí "doběhnutí" příslušného leadra d. střelba botů kvůli testování byl přidán konzolový příkaz "mbshoot on/off"; pokud je off, boti mají zablokovanou střelbu (granáty a dýmovnice používají); střelbu lze deaktivovat pouze v případě aktivního multibota 8) multibotspawninit() (nová) - provádí párování botů do týmů leaderfollower podle následující logiky: a. Každý bot vstoupivší do této funkce předpokládá, že bude follower a prochází pole všech botů a hledá leadra z jeho týmu, který ještě nemá žádného followera. b. Pokud jej nenalezne, stane se sám leadrem a nastaví flag searchingfollower na true, na znamení toho že hledá followera. Další bot z jeho týmu, který do rutiny vstoupí jej pak nalezne. c. Pokud je tedy leader nalezen, je provedeno spojení obou botů. Do atributu twin obou botů je uložen index jeho kolegy z tabulky botů. Poté je followerovi zadán úkol TASK_MULTIBOT, který zařídí následování příslušného leadra. 9) logtwinconnections() (nová) pokud je definován přepínač MULTIBOT_LOG, zapisuje do logu tabulku botů, ve které je zaznamenáno jejich propojení. bot_client.cpp 1) BotClient_CS_DeathMsg() (úprava) tato funkce je volána pokaždé když je zabit člen nějakého týmu. V takovém případě je zrušeno existující spojení páru a přeživší člen je připraven pro začlenění do páru nového. dll.cpp 1) inicializace externích proměnných multiboton a mbshooton 2) nastavení proměnné multiboton přes konzolový příkaz

Poznámka V případě zadání příkazu "multibot?" do konzoly je vypsána informace o tom, zda je multibot aktivní a pokud je, je vypsána i tabulka multibotích spojení. 3) nastavení proměnné mbshooton přes nedokumentovaný konzolový příkaz pouze pro testování 4) nastavení proměnné multiboton při načtení ze souboru podbot.cfg 6. Závěr Tato práce byla pro mne osobně velice zajímavá, protože programování her mě lákalo od jakživa. Přestože se jednalo pouze o úpravu části existujícího kódu, umožnilo mi to proniknout hlouběji do dané problematiky a poopravit některé z mých "naivních" představ o jejích principech. Doufám a věřím, že použitím "mého vylepšeného" bota hra neztratila nic ze své hratelnosti a přitažlivosti, možná právě naopak.

7. Prameny http://www.planethalflife.com/botman/ - nejlepší stránka o tvorbě botů do Halflifu a několika dalších her - na http://www.planethalflife.com/botman/links.shtml jsou odkazy na spousty dalších stránek o botech http://www.counter-strike.net/ - stránka modu Counter Strike na enginu Halflifu http://ai-depot.com - základní informace o tvorbě počítačových her - turotialy http://www.gamasutra.com/ - abeceda herního vývojáře :-) http://www.gameai.com/ - informace o umělé inteligenci ve hrách http://www.gamers.org/dengine/quake/ - stránka vývojářů hry Quake http://www.planetquake.com/ - stránky her Quake, Quake2, Quake3 a jejich modů http://www.urbanterror.net/ - stránky modu Urban Terror na enginu Q3A