Hlavní navigace

Seznamte se, přichází ltrain

13. 1. 2004
Doba čtení: 6 minut

Sdílet

Dalším z projektů, který v této sérii představím, je ltrain, což je realtimová hra typu klient/server simulující železniční dopravu. Ti, co si právě vzpomněli na hru "Transport Tycoon" a jí podobné, by si článek neměli nechat ujít.

Úvod

Hned na začátku musím gamblery zklamat, protože je to zatím stoprocentně nehratelné. V současnosti je klient (grafické rozhraní) v návrhu a na serveru začíná implementace nejdůležitějších částí. Přesto se dozvíte aktuální stav projektu, jeho návrh (co se to plánuje) a jeho budoucnost (jak by to asi mělo celé dopadnout).

Motivace a trocha historie

Hodně projektů bývá uváděno kapitolou o tom, co zapříčinilo jejich vznik, většinou s názvem „Motivace a cíle“. Motivací bylo těžké loučení s hrou „Transport Tycoon“ při přechodu od DOSu k Linuxu. Cílem pak bylo vytvořit něco podobného (jednoduchého a skvěle hratelného), ale daleko lepšího.

Jednoho dne (kdy jsem se při učení na zkoušku úspěšně nudil), jsem se rozhodl založit ltrain se slovy „Nemůže to být přeci tak těžké, bude mi na to stačit pětiletka :-)“. Po několika dnech programování jsem uchodil základ serveru a klienta (konektivitu, připojování, předávání zpráv). Ovšem zradila mě výpočetní technika, kdy při poškození souborového systému nenávratně zmizela celá tato práce. Nyní již vím, že zálohování se vyplatí.

Rok trvalo, než jsem celý nápad znovu oprášil a projekt znovu založil. A další rok (s několika přestávkami) trvalo, než se dostal do současného stavu a také k první (této) prezentaci. No a to už načínám třetí rok z pětiletky a evidentně se mi národní hospodářství hroutí.

Současnost

Architektura klient/server skýtá mnoho možností a taky záludností. Je počítáno s tím, že klient bude relativně „hloupý“ a prakticky bude pouze grafickým rozhraním pro uživatele. Server na druhou stranu bude bez grafiky, ale bude obsluhovat většinu logiky hry.

Klient a server jsou navrženy vláknově, což zjednodušuje jeho rozšiřitelnost, ale zvýší složitost jiných částí, například komunikaci. Každé vlákno má určenou svou úlohu, například na klientech bude určitě jedno vlákno pro grafiku, jedno pro komunikaci se serverem a další například pro obsluhu zvuku. Server pak může mít jedno vlákno pro plánování, další pro generování počasí a pro každého klienta samostatné vlákno pro komunikaci s ním. Je počítáno s možností mít vlákna, která budou simulovat několik protihráčů s umělou inteligencí.

Klient se nyní umí pouze připojit k serveru. Server je na tom o něco lépe, dokáže nahrát prostředí hry (theme), nahrát samotnou hru (zatím pouze tvar povrchu) a hru uložit (taky jenom tvar povrchu). Dále je k dispozici konzole (jako samostatné vlákno) pro ovládání a konfiguraci hry. Pro všechny používané soubory byl zvolen formát XML, kód je psán v jazyce C.

Ještě jsem se nezmínil o společném kódu obou programů, kde jsou naprogramovány datové struktury a funkce pro jejich ovládání. Připraveny jsou datové struktury a funkce pro mapu (tvar a povrch), vagónky (včetně mašinek), vlaky a nejnověji struktury pro koleje. Dále bude následovat kód pro vytváření tratí a signalizace (semafory).

Kompilace a dokumentace

Přes drobné obtíže jsem se nakonec prokousal programy automake, autoconf, autoheader, gettext a dalšími, aby bylo možné vygenerovat configure a ltrain přeložit také na platformě win32 (odzkoušeno pouze v cygwinu). Díky tomu lze překládat standardní cestou ./configure; make; make install, a to s podporou lokalizace.

Pro dokumentaci projektu (už se mi několikrát stalo, že jsem se docela hodně ztratil, a tak se stala dokumentace nutností) byl zvolen program doxygen, který mě neuvěřitelně nadchnul. Zde si taky můžete prohlédnout datové struktury, které byly použity pro uložení informací o tvaru povrchu (terrain), o použitém povrchu (surface) nebo o jednotlivých vozidlech (cars) či vlacích (trains) vzniklých spojením několika vozidel, tj. lokomotiv a vagonků.

Věštba z křišťálové koule

Klient

Grafika by měla být napsána v OpenGL (nebo nějaké vyšší knihovně postavené nad OpenGL). V plánu je možnost přepnout se do lokomotivy a mít možnost ji řídit (což možná bude daleko dřív než původní záměr). Pohled na hru by měl být standardní u těchto typů her (šikmý pohled z nebe), ale s možností si to natočit/přiblížit dle libosti. Vývoj měst, rozvoj zdrojů, továren a dalších věcí bude záležitostí serveru.

Server

V plánu je vlákno na generování počasí (opravdu pěkná blbůstka), také vývoj ekonomiky je nezanedbatelný a určitě bude zajímavý počítačový „nepřítel“. V nejbližší době je nutné dopsat datovou strukturu a funkce pro uložení tratí na mapě a logiku řízení dopravy (tedy semafory). Potom už jen posadit lokomotivu a projet se :-).

Logika hry

To nejlepší na konec. Snaha je přiblížit se realitě a odbourat nezáživné činnosti. Proto například stavba tratí bude probíhat dvoufázově. Napřed se založí plán, kde se trať navrhne, jak má vypadat (virtuálně se položí), a až to bude vypadat dobře, tak se odsouhlasí a nechá se postavit (a až nyní začnou odtékat finanční prostředky).

Strašně se těším, až mi po železnici bude jezdit údržbářská četa (sada servisních vlaků a zařízení) a když dám někde udělat plán pro upgrade kolejí, tak tam přijedou a všechno pěkně sami udělají (včetně odklonění vlaků, pokud to bude možné). Pokud se budou údržbáři příliš nudit, tak se mohou po trati projíždět a místa se sníženou rychlostí či jinak poškozená provozem zcela autonomně opravovat.

Také nemít jen pevné vlaky, ale oběhové lokomotivy, což mi objasnil Šmudla (nadšený obdivovatel vývoje ltrainu). Jedná se o to, že lokomotiva může v méně vytížených lokalitách obsluhovat více vlaků (vagónů). Má naplánovaný oběh (třeba několik nádraží) a na každém takovém nádraží zkusí připojit vagóny, které se chtějí někam dostat. Lokomotiva je pak zkusí během svého oběhu přiblížit tam, kam chtějí. A to může být problém, protože je v takovém případě třeba přepojovat vagónky a správně (vhodně) je do vlaku řadit. To zase může dělat postrkovací lokomotiva na daném nádraží nebo oběhová lokomotiva (ovšem tím se brzdí ve své práci), to už je však na hráči, jak se rozhodne.

Vlakům by se měly vystavovat trasy z jednotlivých nádraží, čímž by se odstranil problém, kdy se dva vlaky potkají na obousměrné koleji. Zároveň bude možné poslat stejným směrem více vlaků po jedné koleji. Prostě tak, jak je to v reálném světě. Směrování vlaků nebude probíhat vždy na každé křižovatce, ale před odjezdem z nádraží, čímž se zamezí „motání“ vlaků na některých křižovatkách. Zároveň by ovšem měly fungovat odklony vlaků v případě problému (porouchaná lokomotiva, přestavba nebo zrušení trati).

Nádraží tím pádem budou větší než v obdobně laděných hrách a také depa nebudou řešena jedním malým baráčkem, kam se v pohodě vlezou všechny vlaky, ale jako rozsáhlý areál (a patřičně drahý), kde se budou odkládat nepoužívané lokomotivy a vlaky, dělat upgrady na vozidlech či jejich pravidelné údržby.

Vývoj

Některé věci zní šíleně, jiné jako rajská hudba. V současné chvíli si nedělám hlavu z hardware, než totiž bude hra doprogramovaná do použitelného stavu, bude HW o více kroků vepředu a dnešní požadavky budou pro něj směšné.

root_podpora

K dalšímu vývoji je potřeba více lidí, aby se to trochu hnulo. Jsou vítáni programátoři (zvláště pak pro klienta), grafici (návrh objektů a grafického zpracování hry), ale třeba i lidi, kteří by byli schopni napsat ltrainu lepší stránky, než má v současnosti. Uvítal bych někoho, na nějž bych se mohl obrátit s dotazem na železniční problematiku (od řízení přepravy až po vlastnosti drážních vozidel). Každý je vítán s otevřenou náručí.

Závěrem jeden (první) screenshotna mapu se stromečkem.

Účinkovali

ltrain hra simulující řízení železniční dopravy
doxygen generátor dokumentace ze zdrojových kódů
simutrain hra na motiv hry „Transport Tycoon“

Byl pro vás článek přínosný?

Autor článku