seeseekey.net - Invictus Deus Ex Machina

Auf der Seite http://forums.themanaworld.org/viewtopic.php?f=1&t=12669&p=117361#p117361 gibt es wöchent­lich Infor­ma­tio­nen dar­über was sich an mana­serv, mana und mana­web so tut. Die Soft­ware wird dabei auch bei Inver­tika (http://invertika.org) benutzt.

Des­halb gibt es hier noch­mal eine Zusam­men­fas­sung. In mana­web (die Web­kom­po­nente für die Account­ver­wal­tung et cetera) wurde viele Feh­ler beho­ben und die Über­set­zung auf get­text umge­stellt. Des­wei­te­ren wurde die Setuppro­ze­dur verbessert.

Auch in mana­serv gab es eine ganze Menge Ände­run­gen wie neue Skript­be­fehle und eine Menge Bug­fi­xes. In der aktu­el­len Ver­sion ist nun mein Patch ange­kom­men wel­cher dafür sorgt das Items wel­che auf der Map lie­gen auch nach einem Ser­ver­neu­start noch dort sind. Eine wei­tere grö­ßere Ände­rung ist die Imple­men­ta­tion des „equipment-fix“ Patches, wel­cher dafür sorgt das das Aus­rüs­ten nun wie­der funk­tio­niert und eine ganze Menge andere Bugs beho­ben hat.

Dane­ben arbei­ten wir im Moment daran Angel­Script in mana­serv als zweite Skript­spra­che neben LUA zu imple­men­tie­ren. Schritt für Schritt wird es also ;)

Am 15. März 2011 kam der Mana Cli­ent 0.5.1 her­aus. Auf die­sem Cli­ent baut auch Inver­tika auf, aber darum soll es in die­sem Arti­kel nicht gehen ;) Viel inter­es­san­ter ist der letzte Satz in der Releaseankündigung:

Let’s make testing.manasource.org a playable environ­ment and let’s allow Inver­tika to switch from their old „sta­ble“ ver­sion of mana­serv to the latest mas­ter branch!

Inver­tika nutzt ja noch eine ältere Ver­sion des Mana­serv Ser­vers in wel­chem einige Funk­tio­nen (glo­bale Varia­blen, Craf­ting, et cetera) noch nicht imple­men­tiert sind. Der Grund dafür ist das am aktu­el­len Mas­ter Branch von mana­serv so viel geän­dert und ent­wi­ckelt wurde, das die­ser nicht wirk­lich pro­duk­tiv ein­setz­bar war.

Das hat sich in letz­ter Zeit aller­dings spür­bar gebes­sert so das das Inver­tika Team hofft in nächs­ter Zeit auf den neuen Ser­ver umzu­stei­gen, was sich dann sicher­lich durch einige neue Fea­tures bemerk­bar macht.

Für alle wel­che Inver­tika nicht ken­nen: Dabei han­delt es sich um ein freies (GPL) 2D-MMORPG wel­ches unter http://invertika.org zu fin­den ist.

Da auf Android Anwen­dun­gen in Java geschrie­ben wer­den, ist das kom­pi­lie­ren von Mana Mobile für Android etwas kom­pli­zier­ter. Schließ­lich han­delt es sich um eine in Qt (und C++) geschrie­bene Anwen­dung. Diese Anlei­tung bezieht sich dabei auf einen Kubuntu 10.10 Rech­ner. Zuerst muss das ent­spre­chende Qt SDK für Android unter http://sourceforge.net/projects/necessitas/files/ her­un­ter­ge­la­den werden.

Nach dem Down­load muss der Instal­ler mit­tels:

chmod +x necessitas-0.1.1-Linux-x86-Install

aus­führ­bar gemacht wer­den. Dann kann der Instal­ler gestar­tet wer­den. Instal­liert wer­den sollte das ganze in den Ord­ner /opt/necessitas/ da die­ser vom Ent­wick­ler­team von Neces­si­tas inten­siv getes­tet wurde.

Nun müs­sen noch das Android SDK sowie das Android NDK instal­liert wer­den. Das SDK kann dabei unter http://developer.android.com/sdk/index.html bezo­gen wer­den. Nach dem Down­load des sel­ben wird das SDK ent­packt und an eine gewünschte Stelle gelegt. Anschlie­ßend geht man dort in den Ord­ner tools und führt im Ter­mi­nal

./android update sdk

aus. Dadurch wird das SDK geup­datet. Nun muss nur noch das NDK (zu fin­den unter http://developer.android.com/sdk/ndk/index.html) her­un­ter gela­den wer­den und an gewünsch­ter Stelle ent­packt wer­den. Bei bei­den Deve­l­oper Kits ist dabei zu ach­ten die jeweils rich­tige Ver­sion (in die­sem Fall die Linux Ver­sion) herunterzuladen.

Nun kann der Qt Crea­tor for Android gestar­tet wer­den. Der Instal­ler hat dazu im Desk­top Ord­ner (im Home Ver­zeich­nis) ein Short­cut ange­legt. Nach dem Start der IDE öff­net man die Optio­nen (Tools -> Opti­ons) und geht dort auf den Qt4 Tab. Dort wird bei der Android für QT Ver­sion der Pfad für qmake ein­ge­tra­gen (/opt/necessitas/Android/„qtversion“/bin/qmake). Die­ser QT Ver­sion muss dann noch ein Name zuge­wie­sen wer­den z.B. android-lighthouse-4.8.0.

Als nächs­tes wech­selt man zu dem Android Tab. Dort wird dann der Pfad zum Android SDK (Mini­mum android-sdk_r09) und zum Android NDK (Mini­mum android-ndk_r5) gesetzt. Nun muss der kor­rekte Tool­chain gesetzt wer­den, in die­sem Fall arm-linux-androideabi-4.4.3. Als letz­tes muss der Pfad für ant gesetzt wer­den wel­cher meist /usr/bin/ant sein sollte.

Nun geht man noch­mal auf den Qt4 Tab und klickt dort auf Build all, damit alle wich­ti­gen Tools gebaut wer­den. Anschlie­ßend kann der Dia­log mit einem Klick auf Apply & OK ver­las­sen werden.

Nun kann es an die Ein­rich­tung von Mana Mobile gehen. Im ers­ten Schritt sollte das Pro­jekt aus den SVN aus­ge­checkt wer­den. Dies funk­tio­niert mit­tels:

svn check­out https://invertika.googlecode.com/svn/trunk/client-mobile/ invertika

In die­sem Pro­jekt befin­det sich eine .pro Datei wel­che mit dem Qt Crea­tor geöff­net wer­den kann. Beim öff­nen fragt der Qt Crea­tor wel­che Build­ziele man com­pie­ren möchte. Hier wählt man die Andro­id­va­ri­an­ten mit an und bestä­tigt das ganze mit dem Finish But­ton. Dann kann man das ganze test­weise mit dem Build All But­ton kom­pi­lie­ren. Dabei dürfte es an zwei Stel­len zu Pro­ble­men kom­men. Die erste Stelle ist die Funk­tion setO­ri­en­ta­tion (in der Datei qmlapplicationviewer.cpp):

    case ScreenOrientationLockPortrait:
        //attribute = Qt::WA_LockPortraitOrientation;
        break;
    case ScreenOrientationLockLandscape:
        //attribute = Qt::WA_LockLandscapeOrientation;
        break;
    default:
    case ScreenOrientationAuto:
        //attribute = Qt::WA_AutoOrientation;
        break;

Dort müs­sen die Zuwei­sun­gen des Attri­bu­tes aus­kom­men­tiert wer­den. Anschlie­ßend dürfte ein Feh­ler in der Biblio­thek enet (enet_address_get_host in der Datei unix.c) auftreten:

    #if defined(linux) || defined(__linux) || defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        //gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & hostEntry, & errnum);
    #else
        hostEntry = gethostbyaddr_r ((char *) & in, sizeof (struct in_addr), AF_INET, & hostData, buffer, sizeof (buffer), & errnum);
    #endif
    #else
        in.s_addr = address -> host;

        hostEntry = gethostbyaddr ((char *) & in, sizeof (struct in_addr), AF_INET);
    #endif

Hier wird dann der Funk­ti­ons­auf­ruf gethost­byaddr aus­kom­men­tiert. Danach sollte das ganz kom­pi­lie­ren. Wenn man dann auf den Run But­ton drückt lie­fert ant noch eine Feh­ler­mel­dung:

BUILD FAILED
/home//android-sdk-linux_x86/tools/ant/main_rules.xml:306: null retur­ned: 1

Total time: 0 seconds
Packa­ging Error: Com­mand ‚/usr/bin/ant debug‘ failed.Exit code: 1
Error while buil­ding pro­ject mana­mo­bile (tar­get: Android)
When exe­cu­ting build step ‚Packa­ging for Android’

Hier hilft es die mini­male SDK Ver­sion von android-3 auf android-4 anzu­he­ben. Dazu geht man auf den Tab Pro­jects und dort auf die Run Kon­fi­gu­ra­tion des Andro­id­pro­jek­tes. Dort kann man diese Ein­stel­lun­gen dann vornehmen.

Da die OpenGL Bin­dings für die Android Qt Ver­sion noch nicht lauf­fä­hig sind muss in der Manamobile.pro die Zeile contains(QT_CONFIG, opengl): QT += opengl aus­kom­men­tiert werden:

    QT += network
    #contains(QT_CONFIG, opengl): QT += opengl

In der main.cpp müs­sen fol­gende Zei­len aus­kom­men­tiert werden:

    #ifndef QT_NO_OPENGL
    //#include 
    #endif
 
    #ifndef QT_NO_OPENGL
       //viewer.setViewport(new QGLWidget);
    #endif

Außer­dem muss noch die Zeile:

    viewer.setMainQmlFile(QLatin1String("qml/main/mobile.qml"));

in

    viewer.setMainQmlFile(QLatin1String("/sdcard/qml/main/mobile.qml"));

abge­än­dert wer­den. Der qml Ord­ner sollte dem ent­spre­chend dann auch auf der SD Karte lie­gen. Even­tu­ell kann es zu Pro­ble­men kom­men, wenn bei der Anwen­dung die fal­schen bzw. unge­nü­gende Rechte im Mani­fest gesetzt sind. Nor­ma­ler­weise wer­den für Mana Mobile fol­gende Rechte benötigt:

- android.permission.INTERNET
- android.permission.WRITE_EXTERNAL_STORAGE

Ein ande­res Pro­blem könnte auf­tre­ten wenn nicht alle benö­tig­ten Qt Biblio­the­ken in den Pro­jekt­ein­stel­lun­gen akti­viert sind. Dazu geht man in die Pro­jekt­ei­gen­schaf­ten unter Android -> Run -> Package Con­fi­gu­ra­tion -> Libra­ries und klickt dort auf den But­ton Read infor­ma­ti­ons from app­li­ca­tion. Nun muss aus dem Mar­ket nur noch Minis­tro (stellt die OpenGL Bin­dings unter Android bereit) her­un­ter­ge­la­den wer­den. Danach sollte Mana­mo­bile auf einem Andro­id­ge­rät lau­fen. Dabei kommt es im Moment noch zu Ein­schrän­kun­gen, so wer­den Tou­chevents noch nicht rich­tig verarbeitet.

Nun ist das Jahr 2009 zu Ende und es ist Zeit ein Res­umé zu zie­hen. Im Laufe die­ses (und des letz­ten) Jah­res ist Inver­tika zu einem Pro­jekt gewor­den wel­ches mir ans Herz gewach­sen ist. Doch wobei han­delt es sich bei Inver­tika? Inver­tika ist ein freies MMORPG wel­ches für Linux, Mac OS (theo­re­tisch) und Win­dows zu Ver­fü­gung steht. Dabei hat sich im letz­ten Jahr viel getan wie man auch auf der Welt­karte sehen kann.

Das ganze Pro­jekt baut dabei auf der Tech­nik von Mana­source auf. Im nächs­ten Jahr ist es nun daran für span­nende Quests zu sor­gen damit auch der nor­male Spie­ler end­lich etwas zu tun bekommt :) Denn bei allen Fort­schrit­ten ist Inver­tika immer noch im Alpha bzw. Beta Stadium.

An die­ser Stelle möchte ich noch mal der Firma Manitu dan­ken, wel­che uns freund­li­cher­weise den Spiel­ser­ver zur Ver­fü­gung stellt :)

Alle die an die­ser Stelle mit­le­sen sind natür­lich herz­lich dazu ein­ge­la­den mit­zu­ma­chen. So suchen wir z.B. Main­tai­ner wel­che die Pakete für ver­schie­dene Dis­tri­bu­tio­nen (Ubuntu und Co.) erstel­len damit Inver­tika in naher Zukunft unkom­pli­ziert über den Paket­ma­na­ger her­un­ter­ge­la­den wer­den kann und nicht mehr sel­ber kom­pi­liert wer­den muss.

Auch wer­den immer Skrip­ter, Map­per, Gra­fi­ker und andere krea­tive Men­schen gesucht wel­che sich am Pro­jekt betei­li­gen möch­ten :)

In die­sem Sinne, auf in ein neues und hof­fent­lich spa­nen­des Jahr. Mehr zu Inver­tika könnt ihr auf der Haupt­seite unter http://invertika.org erfahren.

Mana Cen­tral wel­ches unter http://manacentral.net ist eine zen­trale Anlauf­stelle für Pro­jekte wel­che auf der Mana Source (http://manasource.org) Tech­nik basie­ren. Dazu gehört z.B. The Mana World (http://themanaworld.org) und Inver­tika (http://invertika.org). Die Web­seite bie­tet ein zen­tra­les Forum sowie eine Auf­lis­tung andere Mana Source basie­ren­der Pro­jekte an.

Mana Source befasst sich mitt­ler­weile los­ge­löst von The Mana World mit der Ent­wick­lung des Cli­ents sowie des Ser­vers um so eine kom­plette 2D MMORPG Platt­form. Zu die­ser Platt­form gehört der Cli­ent, der Ser­ver, eine Web­kom­po­nente sowie eine Biblio­thek mit freien Inhal­ten (Tile­sets, etc.)

Die Ursprünge hat das The Mana Pro­ject beim The Mana World Pro­jekt. Durch die Sepe­ra­tion erhofft sich das Pro­jekt eine bes­sere Koope­ra­tion mit alter­na­ti­ven Pro­jek­ten wel­che eben­falls auf dem Ser­ver basieren.

Seit eini­gen Tagen gibt es die Seite http://manasource.org. Doch was hat es damit auf sich? Frü­her wurde die Tech­nik also z.B. der Ser­ver sowie der Cli­ent direkt im The Mana World Pro­jekt ent­wi­ckelt. Nun ist man dazu über­ge­gan­gen die Ent­wick­lung aus­zu­glie­dern und den The Mana World Ser­ver auch nicht mehr als offi­zi­el­len Ser­ver zu betrach­ten. Das hat einige Vor­teile wie z.B. das der Cli­ent und Ser­ver jetzt nicht nur für eine Welt ent­wi­ckelt wird, son­dern für meh­rere Wel­ten. Das erhöht dann natür­lich auch die Fle­xi­bi­li­tät des Ser­vers. Las­sen wir uns über­ra­schen :)

Eine Welt wel­che auf die­sem Sys­tem auf­setzt ist z.B. Inver­tika.