Python, Lua azaz scriptnyelvek

Végre egy technikai téma, mondhatnánk, remélem értelmes lesz mindaz amit itt majd le szeretnék írni.

A mai játékok szép számmal tartalmaznak script nyelveket. Leginkább a Lua vagy a Python nyelv lehet ismerős. Egyre ritkábbak a saját script próbálkozások (mint például az Unreal Script).

Jelen írásomban a Luaról és a Pythonról fogok írni, megpróbálom összeszedni, miért is jó dolog a script, melyik mennyire jó, hol használják és mire.

Sokkal több játékban vannak scriptek, mint hinnénk, hisz a mai modern nyelvek már eléggé jól beépíthetőek, elrejthetőek, viszont vannak olyan esetek is, amikor a script a játék szerves része, a fejlesztők bátorítják a játékosokat, hogy minél több úgynevezett addont írjanak, ezzel is bővítve a játék tudását.

De akkor lássuk is, hogy mi mindenre lehet jó egy scriptnyelv egy program fejlesztésekor, főleg játék fejlesztésekor. Ha valaki ki tudja egészíteni, azt szívesen veszem.

    • Prototipizálás –  egy nagyon jó megoldás, ha a designerek a játék motorját használva egy scriptnyelvel próbálgatják a lehetőségeket. Minél komolyabb Script Engine van a játékunkban, annál több problémát tudnak megoldani, annál jobb utat találnak arra, hogy a játék sikeres legyen. Mivel egy engine-t nem csak egy játékhoz fejlesztünk (többnyire), ha nem is az első, de a második játéknál már egészen biztos behozza a ráfordított időt.
    • Design kódok – egy játék fejlesztése során sok olyan kód készül, amik a designerek kénye kedve szerint változik. Leginkább a skillek, AI vagy épp a GUI ilyen. Ezek legtöbbször olyan feladatok, amik tipikusan egy scriptnyelvnek valók. A játék engine ad bizonyos lehetőségeket a skill, AI vagy GUI rendszernek, ha ezeket a lehetőségeket kivezetjük egy scriptnek, akkor a designerek, vagy GUI fejlesztők átírhatják, alakíthatják ezeket a működéseket. Ez is egyfajta prototipizálás, de kevesebb fejlesztés, viszont általában csak egy projectet szolgál ki.
    • Triggerezés – a trigger rendszer egyik napjainkban elterjedt módja, hogy script nyelveket használnak. Ez komoly szabadságot ad a designereknek arra, hogy a pályákat egyedire építsék. Először egy RTS játékban találkoztam ezzel a megoldással (Codename Panzers: Cold War), ahol nagyszerűen működött. Persze ahol a sebesség mindennél fontosabb, ott erősen meggondolandó, hogy szükséges-e ez a megoldás.
    • GUI rendszer – egyre több helyről hallom, hogy egy játék, vagy program teljes GUI rendszere, logikája, scriptnyelvre épül. Talán a legismertebb példa maga a World of Warcraft, ahol az addonokkal tetszőleges ablakokat, widget elemeket hozhatunk létre és vezérelhetjük Őket, sőt, ha azt akarjuk a Blizzard által biztosított alap GUI interface-t 100%-ig átalakíthatjuk a saját kedvünkre. Ez a megoldás óriási flexibitást ad a GUI tervezésekor, fejlesztésekor, arról nem is beszélve, hogy a játék élettartalmát is képes meghosszabbítani, hisz a játékosok vagy fejleszthetik, vagy a mások által fejlesztett módosításokkal szinte egy új játékot játszhatnak.
      Blizzard FrameXML: WoWWiki –n találhatunk némi leírást arról, hogy mit is alkotott meg a Blizzard. A FrameXML hez hasonlóan ezt a megoldást már több MMORPG nél láttam. Jó megoldás, persze nem kevés fejlesztést igényel, de cserébe egy olyan GUI Rendszert kapunk, amivel bármit meg lehet valósítani és ha ésszel készítjük el, akkor jó sok projectet kiszolgálhat.  (ActionBarFrame)
    • Addonok – na igen, ez egy nagyon általános megfogalmazás, de sajnos nem találtam jobbat. Az addon rendszer nagyon hasznos lehet egy játékban, akár évekkel is elnyújthatja a játék élet ciklusát, jelentős terheket vehet le a fejlesztők válláról, illetve jelentősen csökkentheti a fejlesztési időt. Másik járulék az olyan addon oldalak, ahonnan a játékunkhoz tartozó addonokat letölthetik a játékosok. a Curse oldalán 4.500 WoW addon található, az egyszerű “Hello világtól”, egésszen a Grid nevű addonig, ami eléggé sok mindent tud (és nem mellesleg 4.5 millió (!) letöltése van, ami már egy teljes játéknak is jó lenne, nem hogy egy addonnak).
    • Content – vagy akár Quest rendszer is lehetne. A Pirates of the Carribean nevű játékban volt megoldva az egész játék menet scriptelve. Itt egy C syntax script nyelv volt, amit indításkor fordított le a játék. Rengeteg kiegészítő készült a játékhoz, amivel jelentősen megváltoztatták a játék menetet!

A megvalósítások után nézzük meg, hogy milyen scriptnyelvek vannak, azaz inkább azt, hogy én miket ismerek, amik szóba is jöhetnek.

Arra, hogy mi mindenre képesek ezek a nyelvek nem nagyon akarok kitérni, hisz mindegyik képes C függvények felhívására, ami mindenre képessé teszi Őket. Habár itt felmerül egy bónusz kérdés, mégpedig a C#. Persze nem megoldhatatlan feladat, ha már tudnak native C kódot hívni, hogy C# ot is elérjék, illetve a C# elérje a scriptet, de azért a legjobb az, ha ez a rész már meg van valósítva és mindezt valakik mások valósították meg. (Igen ezen a területen kicsit ellentmondásos vagyok Önmagammal, hisz mindig azt mondom, hogy mindent nekünk kell megvalósítani, akkor lesz kellően optimális, de egy komoly script nyelv elkészítése, a hozzá tartozó összes toolal … nem kicsi feladat.)

Vágjunk hát bele.

 

Számomra legjobban ismert scriptnyelv, a Lua.

A Luanak rengeteg előnye van és alig akad olyan hátránya, amit komolyan fel lehetne neki vetni.

  • Sebesség – rettentően gyors, gyorsabb mint minden más script nyelv, amivel eddig találkoztam. Az alap rendszer nagyon letisztult, nem zsúfolják tele minden féle extra felesleges feature el, ezt meghagyják a betölthető moduloknak
  • Memória használat – ugyancsak verhetetlen, pont azért, amiért gyors is. Az alap rendszer nem sok mindent csinál és amennyire lehet agyon van optimalizálva
  • Binary format – nem is tudom mennyire lehet felhozni ezt előnynek, hisz ma már alapvető elvárás ezeknél a scripteknél
  • User friendly – a Lua nagyon egyszerű, jól átlátható, a számomra általános nyelvekre hasonlít (C, JavaScript, PHP, Java) emiatt könnyen tanulható, de mégsem típusos, nincs benne pointer, vagy bonyolult alacsony szintű adatkezelés, emiatt nem csak programozóknak, hanem designereknek, grafikusoknak, tesztereknek is könnyen emészthető
  • Toolok – a Lua hoz nagyon komoly editorok és debuggerek találhatóak a neten. Egyik személyes kedvencem a Decoda, ami egy eléggé komoly IDE / Dedugger. A Lua VM hez kapcsolódik, így nem kell nekik külön kód support. (Lua Tools)
  • SDK – ez kicsit kétélű a Lua val kapcsolatban. Maga a Lua source szinte teljesen átláthatatlan, viszont készül sok féle C/C++ implementáció (és C#, Java, sőt, még Python is), amik sokkal jobban használhatóak. Személyes kedvenc ismét a LuaPlus. Sajnos binary kiadásban 2010 es a legfrissebb, amit nem is nagyon értek, mert a weboldal logjait nézegetve alig pár napos az utolsó commit. Reméljük az érkező 5.2 es Lua nál frissítik a binárisokat is. (főleg mert a source hoz Jam al kell legenerálni a legeneráló fájlokat, nem is értem hogy jut eszébe ilyesmi bárkinek is …)
  • Multi platform– igen igen! A Lua multi platform. Főleg, hogy a Lua5.1 source-a annyira ansi, hogy szinte bármire le lehet fordítani, de jó sok előre fordított bináris is van. (LuaPlus is fordul Linux alá, némi módosítással). Linux/Windows/Xbox/PS/Kb minden okos telefon
  • Modulok – azt írtam, hogy az alap rendszerbe nem akartak sok mindent zsúfolni, viszont a modularitása komoly figyelmet kapott. Rengeteg modul készült a Luahoz, amivel már szinte bármit meg tudunk csinálni (OpenGL,D3, hálózat, Windows Forms, GTK+, adatbázisok és még sorolhatnám). Saját magunk is nagyon egyszerűen fejleszthetünk hozzá saját modul-t ami így könnyebben portolható a projectek között.

Egyszóval a Lua rendkívül sokoldalú és jól használható script nyelv, rengeteg olyan tulajdonsággal, ami egy játékfejlesztés, vagy bármilyen más fejlesztés során fontos lehet. Az alap C Lua5.1 es kód (most ez a legújabb, de már készül az 5.2, ami most beta), nehezen érthető, nehezen átlátható, nem a legkönnyedebb, de vannak hozzá olyan C++ kiegészítők, wrapperek, amik könnyűvé teszik a használatát, de nem lassítják jelentősen.

Játékok amik biztos, hogy Lua-t használnak:

  • Codename Panzers: Cold War
  • World of Warcraft
  • Warhammer Online
  • Alods Online
  • Rift
  • Sim City 4
  • CryEngine
  • Supreme Commander
  • Heroes of Might and Magic V
  • S.T.A.L.K.E.R.
  • Homeworld 2
  • Maffia II

és még sokan mások:

http://lua-users.org/wiki/LuaUses
http://en.wikipedia.org/wiki/Lua_%28programming_language%29

Nem kevés alkalmazás is a Lua-t választotta, és ami még számomra is meglepő volt, hogy az Apache nak is van Lua module ja és a MySql nek is!

 

Egy másik lehetőség a Python.

A Python egy nagyon komoly script nyelv, amit leginkább Linux alatt láttam rendszer szintű scriptek írására. Rengeteget tud, viszont számomra érthetetlen módon mintha próbálna minél jobban különbözni minden más programozási nyelvtől. Ettől függetlenül sok játékban, alkalmazásban használják, nem kevés előnye miatt.

  • Fejlesztés – a Python open source, alapvetően Linuxos technológia, ettől fogva komoly fejlesztés van mögötte. Jelenleg a 3.2.1 es verzió a legújabb ami éppen egy nagy átmenet és a rendszerek még a 2.7 es verzióval jönnek. (pl a Linuxban is 2.7 es van még, illetve a kikerülő alkalmazások is inkább ezt javasolják)
  • Modulok – hát nem kevés kiegészítő található a Pythonhoz sem. Mivel a C összekötése nagyon egyszerű, mindenki mindent megírt alá, amit nagyon könnyen lehet implementálni. A Linux is nagyon sokat dobott ezen a dolgon, mivel megadta neki azt a keretet ami a Luatól nagyon hiányzik.
  • SDK – még nem nagyon néztem szét, hogy milyen C/C++ interface ek vannak a Python hoz, de az alap, amit a Python-dev csomaggal adnak (vagy ami a Python Windowsos source ban van ugye), az annyira borzalmasan egyszerű, hogy az egész dokumentációja 1 oldalt tesz ki. Emelett az IronPython egy eléggé komolyn .NET es implementációnak tűnik, ami ugyancsak komoly fejlesztési figyelmet kap.
  • Típusok – ez nem lenne alapvetően előny, de ahogy a Python oldotta meg, úgy mégiscsak az. Alapvetően a Python nem típusos nyelv, azaz nem kell megadni hogy valami string vagy int, de ettől függetlenül lehetőség van a típusok használatára, amihez a Python eléggé sok eszközt ad
  • Objektum orientáltság – a Python eléggé komolyan képes objektum orientált lenni, még öröklődés és többszörös öröklődés is van benne: Az OOP nem egy erőltetett valami típusra ráhúzott “hack” mint a Lua ban, hanem valódi, jól megvalósított eszköz, exceptionökkel, öröklődéssel, private változókkal, konstruktorral
  • Multi platform – a Python is rengeteg platformon elérhető. Linux/Windows/Xbox/PS (IronPythonról szólnak Xbox os cikkek). Linux az biztosan működő képes, mivel erősen Linux párti a Python. Maga a Python interpretert láttam már futni Windowson, de még nem néztem meg, hogy mennyire nehézkes saját Python libet csinálni Windows környezetben. A többi platformról még kevesebbet tudok

Hát igen, mindenképpen azt kell mondjam, bármennyire is Lua párti vagyok, hogy a Python egy nagyon nagyon csábító alternatíva. Viszont ameddig a sebesség döntő tényező (már a program futási sebessége), addig a Python komoly hátrányban van, mivel lassabb mint a Lua.

Pár általam ismert játék, ami Pythont használ:

  • EVE Online
  • Battlefield 2 és 2142
  • Civ IV
  • Battlefield Heroes

Mondhatnám, hogy és még sokan mások, de nem nagyon találtam említésre méltó neveket, akik Pythont használnának. Viszont a Python is rengeteg Game Engine kiegészítést tartalmaz! A PyGame egy külön game engine, ami Pythont használ!

 

Némi extra információért az alábbi linkeket tudom még javasolni:

http://lua-users.org/wiki/LuaVersusPython

http://web.archive.org/web/20040916084425/http://www.bagley.org/~doug/shootout/craps.shtml

http://lua-users.org/wiki/LuaComparison

http://en.wikipedia.org/wiki/Comparison_of_programming_languages

http://www.mvps.org/scripting/languages/

Panzer Corps

Igen igen egy játék már megint! Méghozzá nem is akármilyen, hanem a Panzer General remake je a Panzer Corps! panzer-corps-Logo

Aki esetleg nem ismerné a Panzer General-t annak elmondom, hogy talán az eddigi legjobb körökre osztott stratégia volt, amit eddig láttam! A nevéből kitalálható, hogy II. Világháborús játék, ahol a kampányt a német oldalon játszhattuk, a cél pedig ugyan az, Európa / a Világ elfoglalása! A játékban erre volt is lehetőség, ha az ember az elején ügyesen játszott, 1941 ben partra szállhatott Angliában, majd onnan az Egyesült Államok keleti partvidékén és irány Washington! Persze komolyabb nehézségi beállításnál (értsd Hard) erre nem sok esély volt Mosolygó arc

No de nézzük a Panzer Corps ot. Már említettem, hogy a remake ek milyen botrányosan szoktak sikerülni (ugye a Mindíg csak a hülyeség … című írásban erről már esett szó Mosolygó arc), de ezzel szemben a Panzer Corps –t valahogy sikerült jobbra megcsinálni, mint az eredeti játékot! Bombing Cracow

Először is a játék grafikáját jelentősen felhúzták, de nem erőltettek bele újfajta perspektívát (ami miatt számomra a Panzers 3D komolyat bukott!). Az egységek 3D modellekről lettek renderelve ugyan olyan beállításban, ahogy az eredetiben volt.

Fejlesztettek az effekteken is, minden sokkal sokkal látványosabb, de nem zavaró, nincs eltúlozva, egyszerűen felismerhetőek.

A GUI is sokat változott, mivel több hely van (ugye nem 320×200 Mosolygó arc) ezért sokkal több mindent kitettek, de a térkép így is jól átlátható maradt (arról nem is beszélve, hogy a görgővel ki és be lehet zoomolni)panzercorps_GustavStats

Az egységeken nem változtattak, viszont kerültek be új egységek, amik egyáltalán nem rontottak a helyzeten, sőt! Jelentősen érdekesebbé és “valódibbá” tették a csatákat!

Van pár új feature is, ami bekerült a játékba, mind olyan, ami vagy könnyített a vezérlésen (nem a játék meneten!) vagy olyan, ami sokkal élvezhetőbbé tette a játékot!

Itt már nem 3 szint van (Easy, Normal, Hard), hanem 5, így kicsit jobban be lehet lőni, mi az ami még szórakoztató, de nem túl könnyű.

Játék közben azon egységek, akiknek van transzportja, azoknál automatikusan mutatja, hogy be kell “csomagolni” ahhoz, hogy odáig eljusson. Ha ilyen mezőre kattintunk, akkor a becsomagolást magától elvégzi, majd a következő körben kicsomagolva kezdi a kört az egység! (mondhatjuk: VÉGRE! Mosolygó arc)

Másik újítás a vonat. Az eredetiben volt hajó, repülő és teherautók, itt bejött a vasút is. Olyan városokban ahol van vonat állomás feltehetjük az egységeinket a vasútra és elvihetjük Őket jó messzire. A vonat 1 kör alatt rengeteg utat tud megtenni, de ugye csak ott, ahol van sín!

Hős

Nem kihagyható a Hősök bevezetése a játékba! A Panzer Generalban is volt már, hogy az egységek kitüntetéseket kaptak, amiket megnézhettünk az adat lapjukon, de úgy különösebben sok jelentősége nem volt, vagy legalábbis én nem vettem észre. Viszont a Panzer Corps ban (persze ugyan úgy vannak kitüntetések) az egységek között hősök születnek, amikről a program értesít is minket! Ezek az egységek pedig bónusz értékeket kapnak, amiktől jobban harcolnak! Szóval a Hőssel rendelkező egységekre érdemes extrán oda figyelni!

 

Egyszóval a Panzer Corps egy nagyszerű játék és bátran ajánlom mindazoknak, akik szerették a Panzer Generalt, egészen biztos, hogy ez a játék is tetszeni fog nekik!

Harcra fel!

Érdekességnek ajánlom: http://www.achtungpanzer.com/ – sok sok II. Világháborús német tank és leírás, történetek, képek, információk!

Rift vagy nem Rift …

Hát igen, megint a Rift, pedig volt már róla szó, de azt hiszem érdemel még néhányat.Rift Nem ez az első MMORPG amiről azt hallottam, hogy WoW verő lesz, de ez az első, amiről el is hiszem. Amikor kipróbáltuk azt hallottam minden honnan, hogy unalmas, nincs benne end content, senki sem játszik vele … de hát ez annyira még nem tántorított el. Megnéztem vannak-e hozzá addonok, mert hát egy igazi MMORPG fokmérője az, hogy van-e hozzá addon … a http://rift.curse.com/ on alig egy pár van, de azoknak sincs meg a helye, hogy az ember hova tegye Őket … ez megmondom őszintén kissé elbizonytalanított. Na de akkor maga a játék … csupa őrület, kb. szó szerint, ugyanis a kezdő területen egyszerűen annyi minden van, hogy nem győzünk utána rohangálni. Szerencsére minden ami a WoW ban idegesített az itt úgy lett megoldva, hogy NE idegesítsen. Akár lvl1 en lehet az embernek lova, ha van pénze, a komolyabb cuccok accounthoz vannak kötve, a temetők nem 10 perc sétára vannak, a 4 szinttel magasabb mobokat nem 2 ütésből ölöm meg és vannak igazi world eventek! Méghozzá nem is akármilyen inváziók vannak itt!

Invasion

Ez a lvl1-lvl19 es kezdő terület, ahová a gyakorolgatás után érkeznek az emberek. Igaz eleinte lent délen vagy, ahol csak néha vannak riftek, de hát onnan hamar eljön mindenki Mosolygó arc 

Egy egy ilyen invázó közepén ott lenni és nyomni a gombot marha érdekes, persze lehet mondani, hogy az ember hamar megunja, habár a WoW ból borzalmasan hiányoztak az ilyen Open World eventek, ahol nem csak a mobokkal de PvP serveren akár egymással is lehetett küzdeni!

Life Rift

A legjobb az egészben az, hogy képesek voltak mindezt úgy megoldani, hogy nem a nagyon erős, csak kocka idióták tudják megcsinálni, de azért az ügyesebb játékosok kihívásokkal találkoznak! Vannak ugyanis eme Rift ek, amikből van pár féle, mind meghatározza, hogy milyen mob jön ki belőle. Ezeknek a Rifteknek vannak szintjeik is, így azt is megmondják, hogy milyen erős az, ami kijön, ergó szépen be tudod magadnak osztani, hogy éppen mivel akarsz megküzdeni! Nagyon hatásos! Arról nem is beszélve, hogy vannak RAID Riftek, amikhez ugye komolyabb társaság kell, gondolom jóval komolyabb felszereltséggel Mosolygó arc

A Rifteknél lehet Public Groupba csatlakozni, ha van ott bárki más, és akár egy grouppá vagy raidé össze lehet állni, és úgy csetepatézni Mosolygó arc Ez általában jól is működik, nekem eddig nem volt vele gondom (de én még csak a kezdő területet láttam!)

Na igen, és épp ma jött ki új patch! Vacak 1GB nyi, amiben új Rift et tettek be, méghozzá PvP Riftet. Erre kíváncsi leszek ha oda jutok!

Apropó PvP Mosolygó arc természetesen kipróbáltam. Hétköznaponként munkaidőben (mert hogy szabin vagyok) is jóval kevesebb a várakozási idő, mint a WoW ban, tehát lehet PvPzni és mivel vagy jobb a WoWnál, vagy ugyan olyan, alapból onnan lépsz be a PvP be ahonnan akarsz (milyen meglepő …), van egy csomó Daily quest, hétvégén dupla pontok, most hoztak be új PvP Warfrontot (az ugyan az mint a Battleground), van egy csomó frakció, vannak PvP itemek, külön lehet venni PvP talentet (nem 1000 goldért, hogy tudjál instázni), 2500 valor ért (ami a honor).

PvP

Mindezek mellett van pár olyan kiegészítés a Rift ben ami nagyon hiányzik mindenhonnan. Ilyen apróságok, ha ki alt tabolok a Rift ből, akkor leveszi a hangot, de ha megtámadnak, akkor villog a taskbaron az ikonja!! Ilyenkor lejjebb veszi az FPS-t is, hogy ne egyen annyi processzort!

Minden ablak mozgatható, van benne külön Layout editor, amivel mindent mozgathatunk, átméretezhetünk, opacity-t állíthatunk.

Az engine is sokkal sokkal fejlettebbnek tűnik, sokkal részletesebb, szebb mint a WoW-é és még így is jobban fut. A fővárosban nem 2 FPS, pedig kb maxra van húzva, és történés is van!

Instance-t én még nem próbáltam, de azt mondják, hogy jó! Az látszik, hogy a fejlesztők teszik bele a contentet (most jött még 1 10 es raid instance, megjelent a cross shard looking for group (shad = server), WoW ban jó sokat kellett rá várni és mindezek mellett mind ahogy már írtam, nem idiótáknak fejlesztik, hanem komolyabb játékosoknak (persze eljöhet az idő, amikor más sok lesz itt is a rinya, hogy jaj jaj nem akarok játszani, csak kell az epic … habár ezt is megoldották, mindenki kaphat epicet egyből Mosolygó arc)

 

Szóval én javallani tudom a játékot csak, mindazoknak, akik valami komolyabban akarnak játszani mint a WoW, mert ez tényleg jobb!