Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek
Napking 87 Dokumentace ročníkového projektu Michal Manda, 1. E květen 2014
Anotace Napking 87 je hra, kde se hráč snaží získat titul mistra světa ve šlofíkování. Docílí toho pomocí spánku, plnění úkolů a nákupu lepších předmětů. Spánek probíhá v reálném čase. Hra je také plně rozšiřitelná, což znamená, že si uživatel muže vytvářet vlastní herní obsah dle libosti bez jakýchkoliv omezení. Hra je vytvořena pomocí herního enginu KuubEngine a využívá grafický systém oken pro navigaci ve hře.
Abstract Napking 87 is a game, where you try to be the world champion in napping. You'll achieve this by sleeping, doing quests and by buying better items. The napping is done in real-time. The game is also fully extensible, meaning that the user can create his/her own game content without any restrictions. It is created using game engine KuubEngine and is using graphical window system for navigation in the game.
Prohlášení Prohlašuji, že jsem jediným autorem tohoto projektu, všechny citace jsou řádně označené a všechna použitá literatura a další zdroje jsou v práci uvedené. Tímto dle zákona 121/2000 Sb. (tzv. Autorský zákon) ve znění pozdějších předpisů uděluji bezúplatně škole Gymnázium, Praha 6, Arabská 14 oprávnění k výkonu práva na rozmnožování díla (§ 13) a práva na sdělování díla veřejnosti (§ 18) na dobu časově neomezenou a bez omezení územního rozsahu. V Praze, dne 10. 6. 2014
1
Obsah Anotace .............................................................................................................................................. 1 Abstract .......................................................................................................................................... 1 Prohlášení ........................................................................................................................................... 1 Zadání ................................................................................................................................................. 3 Cíl projektu ......................................................................................................................................... 3 Řešení projektu .................................................................................................................................. 3 Grafika ............................................................................................................................................ 3 Hudba ............................................................................................................................................. 3 Intro + Animace .............................................................................................................................. 4 Ovládání ......................................................................................................................................... 4 Modifikace...................................................................................................................................... 4 Klíčové částí ........................................................................................................................................ 5 Diagram tříd ................................................................................................................................... 5 GuiWindow + Okna ........................................................................................................................ 5 Stavy ............................................................................................................................................... 6 NapManager............................................................................................................................... 6 MainState ................................................................................................................................... 6 Hráč + Lua ....................................................................................................................................... 6 Ostatní ............................................................................................................................................ 6 Modifikace...................................................................................................................................... 6 Závěr ................................................................................................................................................... 8 Další rozvoj ..................................................................................................................................... 8 Zkušenosti ...................................................................................................................................... 8 Návod na instalaci, spuštění a hraní................................................................................................... 8 Minimální systémové požadavky ................................................................................................... 8 Potřebné knihovny / balíky ............................................................................................................ 8 Windows..................................................................................................................................... 8 Linux ........................................................................................................................................... 8 Spuštění .......................................................................................................................................... 9 Ovládání ......................................................................................................................................... 9 Speciální poděkování...................................................................................................................... 9
2
Zadání
NapKing 87 Michal Manda 1. E Hra o tom stát se mistrem světa ve šlofíkování (šlofíčkování?). Typ hry bude Idle, což znamená, že se ve hře nebude dít moc věcí. Vyžaduje minimální aktivitu od uživatele, takže je vhodná do práce nebo při sledováni videí, avšak cílem je i přes to vytvořit zábavnou hru.
2D OpenGL grafika – textury, žádné modely Adventurové ovládání – Dialogová okna + objekty na obrazovce OpenTK -> KuubEngine Mono – > Linux + Windows Systém vylepšování postavy
Bonusové body:
Lepší grafika Animace Mac verze Integrace skriptovacího jazyka Lua -> Modifikace?
Cíl projektu Cílem mého projektu bylo vytvořit nenáročnou hru pro občasné hráče, která nezabírá moc času. Ovládání jsem se nažil vytvořit jednoduché a přehledné. Po stránce příběhové jsem se nažil věci zpracovat spíše vtipně a obecně celá zápletka je lehce absurdní. Vedlejší cíl mého projektu bylo vyzkoušet všechny nové technologie v našem herním enginu.
Řešení projektu V mém projektu bylo několik zásadních překážek. Dokázal jsem většinu vyřešit, avšak ne všechny.
Grafika Mým prvním problémem byla zřejmě grafika. Naštěstí mi s tímto problém pomohl někdo z internetu a následně jsem si náhodně vygeneroval podle základní, červené, postele další a podobně jsem tento proces opakoval i s ostatními předměty. Tento generační algoritmus však není v mé ročníkově práci.
Hudba Moje hra obsahuje minimum hudby, ale jeden 30 vteřinový úsek s hudbou tam je (konkrétně v intru). Hudbu jsem generoval algoritmem z internetu, který byl původně vytvořen pro účastníky Ludum Dare. Tudíž je volně použivatelný a mohu jím vytvořenou hudbu volně šířit. Také jsem uvažoval o přidání hudby do více částí hry, ale shledal jsem, že by to bylo po zhruba čtvrt hodině
3
hraní silně otravné a hráč by již nemohl dělat ostatní věci v pozadí, aniž by si musel před tím hru ztlumit.
Intro + Animace Bohužel tuto překážku jsem kvůli nedostatku svého uměleckého nadání nepřekonal. Není v mých možnostech vytvořit slušně vypadající animaci a grafik odmítal pracovat na něčem takto velkém. Druhým problémem byla limitace enginu. Využíváme systém pro správu oken GWEN a používáme OpenTK (wrapper pro OpenGL) jako renderer. Přestože by neměl být problém vykreslit video s OpenGL, tak nevím jak se s OpenGL zachází. Dalším problémem je že bych si musel video parsovat sám a videa používají složitou kompresi a ještě je tam k tomu zvuk. Mohl bych použít nějakou knihovnu, jako například Bink, ale tyto technologie stojí peníze a já nemám prostředky na to, abych mohl takovéto technologie využívat.
Ovládání Ovládání hry bylo zásadní otázkou, protože jsem se snažil nedělat složité nabídky. Zezačátku jsem měl v plánu udělat ovládání pomocí obrázků. Následně by hráč klikal na objekty na obrázcích. Například kliknutí na postel by otevřelo menu na spánek. Avšak tato možnost byla grafický více náročná a hra se občas stávala nepřehlednou. Od tohoto nápadu jsem proto opustil a rozhodl jsem se začít používat okna. Výhodou je že hráč si může okna přesouvat volně po herní ploše a uspořádat si je akorát tak, jak potřebuje.
Modifikace Od začátku projektu jsem chtěl, aby byla moje hra plně modifikovatelná, bez potřeby umět programovat. Je pravda, že pro vytvoření úkolů je potřeba znalosti skriptovací jazyku Lua, ale ten není těžký se naučit. Já osobně jsem se základy například naučil za pouhý jeden den. Hráč si muže bez problému vytvářet vlastní předměty a úkoly pomocí XML souborů se značkami. Není potřeba žádný speciální editor a na svých stránkách mám návody pro začátečníky, které pochopí snad každý.
4
Klíčové částí Diagram tříd
GuiWindow + Okna Okna jsou bezpochyby nejklíčovější částí mé hry. Jak můžete na diagramu vidět, je jedna hlavní abstraktní třída GuiWindow od které se odvíjejí všechna ostatní okna. Tato třída poskytuje metody jako přepínání mezi skrytím a zobrazením, referenci na hlavní třídu a instanci herního okna, na které se dále přidávají další komponenty (tlačítka, text, nabídky). Také jsem přidal metodu Update, která se vykoná při každé aktualizaci hry (zhruba 60x za vteřinu). Poslední důležitou částí je metoda LoadLanguage, která v případě změny herního jazyka nebo potřeby aktualizace textu znovu načte text všech komponentů v daném okně. Speciálními příklady jsou třídy ItemBox a QuestBox. Tyto třídy nevyužívají okna, ale jsou pouze "shlukem" komponentů. Ty jsou přidané do GroupBoxu , který umožňuje spojit více objektů a manipulovat s nimi jako s jedním objektem. Tyto třídy jako jediné používám více než jednou. Jak jíž z názvu vyplívá tak udávají jisté informace o předmětu nebo úkolu (například cena, název, nebo cíl úkolu).
5
Zde vidíte ukázku těchto dvou tříd. Jak můžete vidět, nemají okno.
Stavy Hra se rozděluje na 2 současně běžící stavy. NapManager a MainState. NapManager NapManager se stará o časování šlofíku a posílá event v případě dokončení nebo přerušení šlofíku. Proto se zde také vyskytuje delegát NapEvent, který určuje jaké argumenty a výstupní typy musí mít všechny metody, které naslouchají NapEvent. MainState Zde se děje většina herních mechanik. Tento stav zpravuje všechny okna. V případě nutnosti je zde metoda, která aktualizuje všechen text ve všech oknech, která se používá například při změně herního jazyka. Z této třídy se také volají všechny metody Update. V této třídě se nachází i metoda Wipe, která umožňuje hráči začít s novou uloženou pozicí.
Hráč + Lua Třídy Player a LuaHelper patří k sobě. Player obsahuje všechny informace o hráči, jako například jeho peníze, příjem, předměty a další. LuaHelper mapuje tyto proměnné do skriptovacího jazyku Lua pro použití v úkolech.
Ostatní Následně tu máme třídy pro předmět, obsahující například název, cenu a výdrž a pro úkol, obsahující například podmínku pro splnění, popis nebo odměnu. Také tu jsou třídy Main a Program, které se využívají jen při spuštění programu a prvotní načtení hry. A jako poslední je zde MessageBox, což je pomocná třída umožňující mi vytvořit jednoduchá dialogová okna bez nutnosti kopírování kódu.
Modifikace Každý nový předmět, úkol nebo překlad je ve formě XML souboru se značkami.
6
Zde vidíme, jak vypadá XML soubor pro předmět. Z názvu značek je patrné co každá znamená. Pokud si hráč chce vytvořit předmět vlastní, stačí tuto strukturu zkopírovat, upravit a následně soubor uložit do adresáře s hrou.
To samé platí pro úkoly, které mimo jiné využívají skripty (viz. Spodní obrázek). Skript má 3 funkce, kde 1. se volá při přijmutí úkolu, 2. kontroluje splnění úkolu a poslední se zavolá při splnění.
Je také možno si vytvářet vlastní překlady. Stačí si zkopírovat jakýkoliv stávající jazyk a upravit text ve značkách.
7
Závěr Myslím si, že se mi podařilo více či méně úspěšně splnit zadání a dokonce jsem splnil i některé vedlejší úkoly. Také jsem otestoval funkci herního enginu. Většinu překážek se mi podařilo úspěšně překonat. Bohužel jsem nestihl vytvořit dostatek herního obsahu, takže je čistě na komunitě a na hráčích další průběh a vývoj hry. Avšak není problém další obsah přidat. Další informace můžete nalézt na stránkách http://virusek20.kuubstduios.com , kde můžete nalézt návody pro modifikace, screenshoty a něco o hře (pouze v Anglickém jazyce).
Další rozvoj Rozhodně plánuji tuto hru rozvíjet i nadále. Mám v plánu přidat více herního obsahu a mód pro vývojáře. Tento mód umožní hráči vytvářet vlastní předmět rovnou ze hry bez nutnosti úpravy XML souborů. Také se mu naskytne živý náhled ze hry, takže může posoudit, zdali není například popis úkolu moc dlouhý, nebo jestli se ikona předmětu zobrazuje správně. Další funkcí, kterou mám v plánu je nahlašování chyb přes internet, ale bohužel tato funkce je úzce spjata s herním enginem a tuto funkci nemohu přidat do té doby, než to bude technicky možné v enginu. Sdílení modifikací přímo ze hry je také plánováno, ale vůbec to není jisté.
Zkušenosti Z tohoto projektu jsem se naučil více, než jsem očekával. Hlavním přínosem bylo se naučit spravovat větší projekt. Většinou jsem se ve svých dřívějších projektech lehce ztrácel. Také jsem se naučil jak udělat přehlednou aplikaci bez nutnosti konzole nebo podobných oken. Akorát lituji, že jsem se nedostal k systémům jako je Git, Mercury nebo SVN.
Návod na instalaci, spuštění a hraní Minimální systémové požadavky Operační systém: Windows XP a vyšší, Linux s grafickým prostředím Místo na disku: 16 MB (záleží na modifikacích) RAM: 128 MB Procesor: 1 jádrový procesor x86 Grafická karta: Karta podporující OpenGL 2.0
Potřebné knihovny / balíky Všechny dynamické knihovny jsou obsaženy s hrou. Jediné co potřebujete mít nainstalované je: Windows Je potřeba mít nainstalovaný .NET Runtime 4.0 a ovladače na grafickou kartu. Je také potřeba mít nainstalovaný program Visual C++ Redistributable 2012. Linux Je potřeba mít nainstalovaný balík Mono Runtime, grafické ovladače. Bohužel máme problémy se zvukovými knihovnami a verze pro Linux bude mít zřejmě zpoždění. Pokud chcete, můžete využít programů jako je Wine, nebo virtuální systém.
8
Spuštění 2x poklepejte na spustitelný soubor Napking87.exe. Hra by se měla spustit a mělo by se zobrazit intro.
Ovládání Ovládání je zprostředkováno pouze pomocí oken s tlačítky a dalšími komponenty. V případě, že nevíte co dělat, můžete zkontrolovat nápovědu, která se nachází v hlavním menu, kde si můžete vybrat, o jaké části hry se chcete dozvědět více.
Speciální poděkování Chtěl bych poděkovat mému kamarádovi Petrovi Bauerovi, za to, že mi pomohl s grafikou intra, předmětů, za jeho konstruktivní kritiku a nápady do hry. Dále bych také rád poděkoval Wisse Aartsovi, za společný vývoj KuubEnginu.
9