Applets coden, das macht Spaß

Als klei­nes Neben­pro­jekt hab ich jetzt 2 Wochen damit ver­bracht, ein Java Game in ein App­let zu ver­wan­deln, damit es im Brow­ser spiel­bar ist. Hier meine Erfahrungen…

Aus­gangs­lage

The Legend of Ethos ist ein 2D RPG, ent­stan­den im 3. Semes­ter Medi­en­tech­nik und –design an der FH Hagen­berg. Pro­jekt­lei­ter war mein Bru­der Peter, der mit 3 Stu­di­en­kol­le­gen ein sehr ambi­tio­nier­tes Kon­zept umge­setzt hat. Das Spiel erin­nert mit sei­ner Top-Down Ansicht einer Tile-basierten Welt und den Monster-Kämpfen an die alten Pokémon-Spiele. Das Team hat es geschafft, eine spiel­bare Kam­pa­gnie mit meh­re­ren Quests zu erschaf­fen, wel­che in ca. 1 Stunde durch­ge­spielt wer­den kann. Das ein Game in einem Semes­ter so weit kommt, sieht man selten!

Ethos stand seit der Fer­tig­stel­lung zum Down­load bereit, das kam mir jedoch zu umständ­lich vor. Als Fan wollte ich es gerne ein­fach im Brow­ser spie­len! Also beschloss ich, ein App­let draus zu machen.

Spaß mit JARs

Okay. Game Engine upge­da­ted auf die neu­este Gol­den T. Jetzt den Source Code und die Assets in JARs ver­pa­cken, was im Grunde ZIP-Dateien sind. Was wie­derum bedeu­tet, dass sich alle Pfade ändern und alle Refe­ren­zen im Code auf ein Bild oder ein Sound geän­dert wer­den müs­sen. Lei­der gab es noch keine Funk­tion, die alle Assets beim Spiel­start ladet und den ande­ren Klas­sen zur Ver­fü­gung stellt. Die meiste Zeit war ich also damit beschäf­tigt, eine sol­che Funk­tion zu erstel­len und alle Datei-Anfragen umzustellen.

Was mir sehr viel Kopf­zer­bre­chen berei­tet hat: Es wur­den oft Pfade zu Bil­der ange­ge­ben, die Ord­ner waren. Das Spiel ladete dann alle im Ord­ner ent­hal­te­nen Bil­der. Sicher prak­tisch beim Ent­wi­ckeln der Assets, aber pro­ble­ma­tisch fürs Web. Man kann viel­leicht noch einen Ord­ner von einer Datei mit­hilfe der Datei­en­dung unter­schei­den, aber dann nicht eine Liste aller im Ord­ner ent­hal­te­nen Dateien bekom­men. Ich habe lange nach einer Lösung gesucht, die dies doch ermög­licht. Dabei bin ich auf diese Funk­tion gesto­ßen, die aber lei­der nicht funk­tio­niert, wenn sich das JAR mit den Assets auf einem HTTP Ser­ver befindet.

Im End­ef­fekt habe ich eine XML-Datei mit einer Liste aller Bil­der erstellt, die gela­den wer­den sol­len. Nicht so fle­xi­bel, aber es funktioniert.

Audio, f*$%ing Audio

Die glei­che Geschichte betrifft natür­lich auch die Audio-Dateien, wovon es zum Glück weni­ger Stück gab. Die Dateien waren im spei­cher­hung­ri­gen WAV-Format. Dass sie in etwas fürs Web taug­li­ches umge­wan­delt wer­den muss­ten, war klar. Wel­che For­mate wer­den aber unter­stützt? Mit Add-ons sind das Ogg Vor­bis und MP3. Diese Add-ons zu inte­grie­ren war zum Glück nicht schwer oder zeit­auf­wän­dig. Lange pro­bierte ich es mit dem JOr­bi­sOg­gRen­de­rer, aber es gab Probleme…

Lokal lief alles noch gut. Als ich glaubte, mein Job sei erle­digt, ladete ich alles auf einen Web­ser­ver. Dort kam dann der Fehler:

Excep­tion in thread „Thread-13″ java.lang.NoClassDefFoundError: com/jcraft/jogg/SyncState
at org.newdawn.slick.openal.OggInputStream.<init>(OggInputStream.java:40)

Hä? Viele Google-Suchen spä­ter, keine brauch­bare Lösung. Anschei­nend konnte das App­let die für Audio zustän­di­gen Klas­sen jogg-0.0.7.jar und jorbis-0.0.15.jar plötz­lich nicht mehr fin­den. Diese müs­sen im Build Path ste­hen. Ich hab hier alles versucht:

  1. Im <app­let> Tag stan­den diese JARs schon
  2. Im Mani­fest aller JARs hab ich sie im Class-Path hinzugefügt
  3. Natür­lich auch im Eclipse-Projekt (macht nen Unterschied?)

Ist mir ein Rät­sel. Ame­ri­can Hero läuft mit genau die­sen JARs und spielt Ogg Vor­bis ab. Habs dann ein­fach mit dem JavaLayerMp3Renderer (MP3) ver­sucht. Hat sofort funk­tio­niert. Arrrgh!

App­let Debugging

Tes­ten, Tes­ten, Tes­ten… Bei App­lets dau­erts gefühlte 10 Minu­ten, bis man eine Ände­rung im Code aus­pro­bie­ren kann. Es ist so wie C++ Code kom­pi­lie­ren, nur dass man nicht ein­fach war­tet und neben­bei sur­fen kann, son­dern man jedes Mal eine hand­voll Schritte aus­füh­ren muss. Okay, zuge­ge­be­ner­ma­ßen hab ich es mir viel­leicht selbst schwie­rig gemacht. Aber so hat das ausgeschaut:

  1. Java-File abspei­chern.
  2. Im Task-Manager java.exe abwürgen.
  3. BAT-Datei star­ten, die die JARs erzeugt.
  4. Mit­hilfe der Uhr­zeit che­cken, ob wirk­lich neue JARs erzeugt wurden.
  5. Refresh im Browser.

Alter­na­tiv kann man auch den Brow­ser jedes Mal nach einem Crash kom­plett schlie­ßen, dann wie­der neu star­ten. Ist aber blöd, wenn man andere Tabs offen hat.

Datei­grö­ßen

Nach­dem alle nicht ver­wen­de­ten Assets gelöscht, die Sounds als MP3s gespei­chert wur­den und alles durch den JAR Maker gejagt wurde, siehe da: Das Spiel ist 8 MB groß. Immer noch viel, aber in Zei­ten wo das durch­schnitt­li­che YouTube Video mehr hat, durch­aus akzep­ta­bel. Lei­der gibt es keine Lade­bal­ken, man muss also einige Zeit auf einen schwar­zen Bild­schirm star­ren, bis sich was tut.

Das Ergeb­nis

Nun ist es also end­lich soweit… Bit­te­schön, The Legend of Ethos spiel­bar im Brow­ser. Hier einige inter­es­sante Links dazu:

Posted in Projects I'm working on | Leave a comment

Particles!

Not much pro­gress on Ame­ri­can Hero… But ear­lier this month I did add par­ti­cles! They make the game look a lot more professional:

This isn’t online yet, because the the XML files defi­ning the par­ti­cle emit­ters aren’t loa­ded using the resource mana­ger at the moment. I only spent one day on this fea­ture, using Slick’s par­ti­cle engine. You can design the par­ti­cle sys­tems with a tool cal­led Pedi­gree:

If you com­pare the pre­view to the screen­shot above, you’ll notice that the smoke plume looks a little bit dif­fe­rent in-game. This is mostly because I re-sample the images using nearest-neighbor, so the pixels don’t get blurry. The edi­tor is still very hel­pful to create these effects. You can create a color gra­di­ent for the life­time of the par­ti­cles and cur­ves to con­trol their opa­city. There are some limi­ta­ti­ons and I have to be care­ful not to have too many par­ti­cles on screen at the same time, but I’m very happy with how the ani­ma­ted par­ti­cles add to the gra­phics of the game.

Smoke is nice and all, but I really need some cool loo­king, power­ful explo­si­ons! It’s a little more tri­cky, because the par­ti­cles should only be spa­w­ned at one point in time. To make it look good I pro­bably need mul­ti­ple emit­ters. Let’s see how that goes… The other way to do it would be sprite ani­ma­tion… Which is ano­ther big chal­lenge I still need to tackle!

Posted in American Hero, Projects I'm working on | Leave a comment

Started making my own indie game

Making a video game has been my dream since childhood. A few months after gra­dua­ting, I rea­li­zed that I have enough skills and know­ledge about game deve­lop­ment to actually do it. My first attempt from last sum­mer didn’t really go any­where. But right now, I’m actually finally making my own game and having a lot of fun!

I made a page for it.

This has been in deve­lop­ment since the begin­ning of the new year, exclu­ding a 2 week break, when I was having a fever. The game has evol­ved quite a bit in this time. I noti­ced that I didn’t even take screen­shots to docu­ment the pro­gress and wan­ted to blog about new fea­tures and chal­len­ges I had faced. So I thought about set­ting up a tum­blr or some­thing, soon rea­li­zing that I alre­ady have a blog! And it is in des­pe­rate need of new con­tent! So here you go. I’m keeping this inter­na­tio­nal; ever­y­thing will be in English.

(more screen­shots)

It’s an old idea really. In 2004 two bud­dies from school, Wolf­gang and Tho­mas, wan­ted to make a game with me. We were 16/17 years old and had never done this before. We wan­ted it to be heavy on the nar­ra­tive, so we crea­ted a huge ambi­tious con­cept detailing the cha­rac­ters and the story. 3D assets and some levels were crea­ted. But we didn’t think of a fun game­play con­cept. After some years, the pro­ject was abandoned.

It is now back in a smal­ler scope, with a focus on crea­ting a fun playable game that is sup­por­ted by awe­some game art!

Posted in American Hero | 1 Comment