<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gemserk</title>
	<atom:link href="http://blog.gemserk.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gemserk.com</link>
	<description>Game Development Company</description>
	<lastBuildDate>Sat, 04 Feb 2012 11:36:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How we use Box2D with Artemis</title>
		<link>http://blog.gemserk.com/2012/02/02/how-we-use-box2d-with-artemis/</link>
		<comments>http://blog.gemserk.com/2012/02/02/how-we-use-box2d-with-artemis/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 18:13:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[artemis]]></category>
		<category><![CDATA[box2d]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[techniques]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2176</guid>
		<description><![CDATA[As you may know from our previous posts or from your personal knowledge (obviously), Box2D is a 2D physics engine and Artemis is an Entity System Framework. Box2D is used to add physics behavior to games however it could be used only to detect collisions if you want (that means no dynamic behavior). In this [...]]]></description>
			<content:encoded><![CDATA[<p>As you may know from our previous posts or from your personal knowledge (obviously), Box2D is a 2D physics engine and Artemis is an Entity System Framework. Box2D is used to add physics behavior to games however it could be used only to detect collisions if you want (that means no dynamic behavior). In this post, we want to share a bit how we are using both frameworks together.</p>
<h3>Introduction</h3>
<p>The main idea is to react to physics events, like two bodies colliding, to perform some game logic. For example, whenever the main character ship touches an asteroid, it explodes.</p>
<p>When you use Artemis, the game logic is done in an Artemis System or a Script (custom), if you use our customization. The ideal situation would be if you could check in your game logic which entities are in contact or not. In order to make that work, you have to find a way to link a Box2D contact with an Artemis Entity and vice versa.</p>
<h3>Our solution</h3>
<p>The first thing we do is, to each Artemis Entity we want to have a physics behavior, we add a PhysicsComponent the Box2D Body of the Entity and a Contacts instance where all the Box2D contacts for that Body are stored. Also, in order to get the Entity from the Body, we set the its userData pointing to the Entity.</p>
<p>The Contacts concept gives us useful methods to get information about contacts and the API looks like this:</p>
<pre>
    getContactsCount() : int - returns the contacts quantity
    getContact(index: int) : Contact - returns the contact information
</pre>
<p>And our Contact concept API, returned by the Contacts getContact() method, looks like this:</p>
<pre>
    getMyFixture() : Fixture - returns the fixture in contact of the Contacts owner Entity.
    getOtherFixture() : Fixture - returns the fixture of the other Entity.
    getNormal() : Vector2 - returns the normal of the contact.
</pre>
<p>(note: we decided to make a deep copy of the contacts information since it is recommended in the <a href="http://www.box2d.org/manual.html#_Toc258082975">Box2D manual</a> if you use a ContactsListener)</p>
<p>Then, we have a ContactsListener (named PhysicsListener) which, whenever a contact is reported (begin or end), it gets the bodies from the contact and gets the entities from each body userData and then adds or removes the contact data to/from each Entity&#8217;s PhysicsComponent using its Contacts instance.</p>
<p>(note: we decided to use a custom ContactListener since it is recommended in the <a href="http://www.box2d.org/manual.html#_Toc258082975">Box2D manual</a>)</p>
<p>Finally, in each Artemis System or Script, we use the Entity&#8217;s PhysicsComponent to get the contacts data and we proceed to do the logic we want, for example, destroy the character or enable some special ability, etc.</p>
<p>Here is an example of how we use it inside a Script from our Leave me Alone game:</p>
<pre>
public void update(World world, Entity e) {
	PhysicsComponent physicsComponent = Components.getPhysicsComponent(e);

	Contacts contacts = physicsComponent.getContact();

	if (!contacts.isInContact())
		return;

	boolean shouldExplode = false;

	for (int i = 0; i < contacts.getContactCount(); i++) {

		Contact contact = contacts.getContact(i);
		Entity otherEntity = (Entity) contact.getOtherFixture().getBody().getUserData();

		GroupComponent groupComponent = Components.getGroupComponent(otherEntity);

		if (groupComponent == null)
			continue;

		if (groupComponent.group.equals(Groups.EnemyCharacter)) {
			shouldExplode= true;
			break;
		}

	}

	if (shouldExplode)
		eventManager.dispatch(Events.MainExploded, e);
}
</pre>
<p>If you use Box2D and you are starting to use Artemis or vice versa, hope this post could help you. Otherwise, I hope you like it.</p>
<p>Also, if you use Artemis with Box2D in another way, would be great to have your point of view.</p>
<p>Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/02/02/how-we-use-box2d-with-artemis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our participation in Global Game Jam 2012 Uruguay</title>
		<link>http://blog.gemserk.com/2012/01/30/our-participation-in-global-game-jam-2012-uruguay/</link>
		<comments>http://blog.gemserk.com/2012/01/30/our-participation-in-global-game-jam-2012-uruguay/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 00:11:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[ggj]]></category>
		<category><![CDATA[medusa]]></category>
		<category><![CDATA[postmortem]]></category>
		<category><![CDATA[uruguay]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2150</guid>
		<description><![CDATA[Uruguay decided to join the Global Game Jam 2012 (GGJ12) for the first time and we (as Gemserk) decided to join them. The Global Game Jam is an event where all around the world people get together in different locations and split into teams in order to make games in 48 hours following a theme [...]]]></description>
			<content:encoded><![CDATA[<p>Uruguay decided to join the Global Game Jam 2012 (GGJ12) for the first time and we (as Gemserk) decided to join them.</p>
<p>The <a href=http://globalgamejam.org>Global Game Jam</a> is an event where all around the world people get together in different locations and split into teams in order to make games in 48 hours following a theme set by the organizers.</p>
<p>This year, the theme was this picture:</p>
<p><a href="http://en.wikipedia.org/wiki/Ouroboros"><img src="http://blog.gemserk.com/wp-content/uploads/2012/01/600px-Ouroboros-simple.svg_-300x300.png" alt="Ouroboros" title="Ouroboros" width="300" height="300" class="aligncenter size-medium wp-image-2152" /></a></p>
<p>That image represents the <a href="http://en.wikipedia.org/wiki/Ouroboros">Ouroboros</a> which represents the perpetual cyclic renewal of life, the eternal return, and represents the cycle of life, death and rebirth, leading to immortality, as in the phoenix.</p>
<h3>The Team</h3>
<p>Our team was composed game by <a href="http://jpgart.deviantart.com/">José Pedro Gioscia</a> (The Artist), Washington Miranda (Programmer) and us (both Programmers). Hernán Gonzales Martinez from <a href="http://www.tonoweb.com/">Tono Sound Production</a> provided the music and sound effects for our game, he did the same thing for most of the other teams on our location.</p>
<h3>The Game</h3>
<p>The game was named Medusa &#8211; “La viborita multiloca”, you play the game as a serpent on space and you move horizontally around a cave eating or being hit by other monsters. Whenever the monsters or the obstacles hit your body it breaks from that point. If the remaining part of your body is too short, you are weakened and can&#8217;t eat monsters anymore. You die if you hit an obstacle or hit a monster while you are weakened.</p>
<p>The interesting part of the game is that after death comes rebirth. When you die, you revive at the start of the level with an echo of your past lives. They will help you in your journey eating the  monsters in their path but they will leave parts of their bodies as new obstacles when they are injured.</p>
<p>Right now the game has no defined objective, it is more an experimental test of the mechanics and when you play you make your own objectives enjoying going through the random level and interacting with your past lives on the world.</p>
<p><img src="http://blog.gemserk.com/wp-content/uploads/2012/01/splashscreen.jpg" alt="" title="Splashscreen" width="640" height="300" class="aligncenter size-full wp-image-2159" /><br />
<img src="http://blog.gemserk.com/wp-content/uploads/2012/01/Press.jpg" alt="" title="Press" width="640" height="318" class="aligncenter size-full wp-image-2158" /></p>
<div align="center"><iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/IlpWiOknwRo" frameborder="0" allowFullScreen="true"> </iframe></div>
<p><a href="http://www.gemserk.com/ggj/2012/launch-webstart.jnlp">Play the game online</a>, or <a href="http://www.gemserk.com/private/ggj/2012/ggj2012-medusa-runnable.jar">download a runnable jar</a> to play it. Control the snake with the arrow keys.</p>
<h3>Conclusions about the Global Game Jam</h3>
<h4>What went wrong</h4>
<ul>
<li>Ironically even though the venue was in a building of the biggest ISP on Uruguay (Antel) the wifi sucked, it used a captive portal method of authentication and forced you to reauthenticate all the time, luckily we could steal the LAN connection from some unused PCs.</li>
</ul>
<h4>What went right</h4>
<ul>
<li> We delivered a finished game</li>
<li>We were able to meet and talk with lots of people that are working locally in the video games industry (<a href=”http://www.batovi.com/”>Batoví</a>, <a href=”http://www.powerfulrobot.com/”>Powerful Robot</a>, <a href=”http://belfrygames.com/”>Belfry Games</a>, <a href=”http://sebagames.wordpress.com/”>Sebagames</a>).</li>
<li>We were finally able to get to talk a little with Pablo Realini from <a href="http://www.ironhidegames.com>IronHide Game Studio</a> makers of the awesome <a href="http://www.kingdomrush.com/">Kindom Rush</a>, who confessed that he is the biggest fan of Gemserk <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>The whole organization and the people who coordinated the GGJ in Uruguay were awesome, the venue was really nice, we had food and drinks available (from the second best carbonated beverage and the second best big burger chain).</li>
<li>Everyone on the jam was really nice, included our team members, there were no problems between the participants, and it was great meeting all of them.</li>
<li>This was the first time we worked face to face with an artist.</li>
<li>We had fun <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<h4>Advice for other jams</h4>
<ul>
<li>Take your time to refine your game idea, don&#8217;t just start implementing right away, think a little about how will the gameplay work, what will the player do, how will he feel when playing, are the mechanics natural, how will you explain them, etc. </li>
<li> A good way to split work between programmers is to make small prototypes of different parts of the game (in our case we started prototyping the snake behaviour while we were building the skeleton for the rest of the game) </li>
<li> Try to rest, trying to stay up both nights of the event will be too much for your body to handle, and you will be tired and it will be difficult to concentrate, making you make lots of mistakes. In our case we went home to sleep on Friday night after we had defined the game idea, and we started Saturday morning well rested. </li>
<ul>
<p>Play the other games for the GGJ12 from Uruguay <a href="http://globalgamejam.org/og/games/17813/list">here</a>.</p>
<p>We hope you like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/30/our-participation-in-global-game-jam-2012-uruguay/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ludum dare 22 &#8211; Leave me alone!! &#8211; Post mortem</title>
		<link>http://blog.gemserk.com/2012/01/13/ludum-dare-22-leave-me-alone-post-mortem/</link>
		<comments>http://blog.gemserk.com/2012/01/13/ludum-dare-22-leave-me-alone-post-mortem/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 15:36:41 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[ld22]]></category>
		<category><![CDATA[leavemealone]]></category>
		<category><![CDATA[ludumdare]]></category>
		<category><![CDATA[postmortem]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2128</guid>
		<description><![CDATA[Leave me Alone!! was my game for Ludum Dare 22 introduced in this post, now I want to make a small post mortem as I did for my previous Ludum Dare games. First of all, I was about to not enter this LD because I couldn&#8217;t spend all the weekend to develop a game but [...]]]></description>
			<content:encoded><![CDATA[<p>Leave me Alone!! was my game for Ludum Dare 22 introduced in this <a href="http://blog.gemserk.com/2011/12/19/leave-me-alone-my-game-for-ludum-dare-22/">post</a>, now I want to make a small post mortem as I did for my previous <a href="http://blog.gemserk.com/tag/postmortem/">Ludum Dare games</a>.</p>
<p>First of all, I was about to not enter this LD because I couldn&#8217;t spend all the weekend to develop a game but in the end I did because I didn&#8217;t want to break the habit.</p>
<p>As I explained in the <a href="http://blog.gemserk.com/2011/12/19/leave-me-alone-my-game-for-ludum-dare-22/">previous post</a> (it has images and videos), <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2034">Leave me Alone</a> is casual game where you use the mouse (on PC at least) to move an orange particle which has to be isolated from incoming blue and green particles with different behaviors.</p>
<p>LD rating stage finished the previous Saturday and these are the <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2034">results for my game</a>:</p>
<pre>
	#114	Fun		3.04
	#168	Community	2.93
	#380	Overall		2.62
	#409	Innovation	2.28
	#458	Theme		2.35
	#519	Humor		1.42  (how??)
	#585	Coolness	17%
	#592	Mood		1.61
	#594	Audio		1.00
	#650	Graphics	1.68
</pre>
<h3>What went wrong</h3>
<ul>
<li>Didn&#8217;t like the theme Alone too much and my first ideas in mind were too complex.</li>
<li>My dedication time was limited and I couldn&#8217;t work a complex idea instead the one I made, or even spend more time to add more value to the selected idea.</li>
<li>Didn&#8217;t dedicate too much time to gain visibility (more info later).</li>
<li>My graphics were too simple, there is no background, no effects, no nothing. There are no sounds either.</li>
<li>I made a timelapse but I was out all the time and it sucks so I never uploaded it to youtube.</li>
<li>Didn&#8217;t worked on the Android version controls and current one is almost unplayable, that means no Android players.</li>
</ul>
<h3>What went well</h3>
<ul>
<li>Even though I had little time to spend on the game, I refine one of the possible game ideas to make it smaller and be able to finish it on time.</li>
<li>Game is fun despite being small and simple (could be better of course).</li>
<li>
The game had some visibility even though I spend almost no time in promoting it (more info later).</li>
<li>Even though some people <a href="http://www.java-gaming.org/topics/ludum-dare-22-leave-me-alone-arielsan-gemserk/25331/view.html">&#8220;called me crazy&#8221;</a> <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  for using a physics engine for a game like this one, I believe it was a correct choice since I know Box2d enough to simplify my life. For example, all movements in the game are made using forces on each body (the particles) and the result is a good simulation of a real movement. Also, all collision logic is solved for me so I have to code less. </li>
</ul>
<h3>How to get visibility to your game</h3>
<p>When you make games in LD you have to make other LD participants to rate your game since is the only way to get rated. There are different ways to improve the visibility of your game:</p>
<ul>
<li>Have already a lot of visibility, for example, if you are a known celebrity like <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=398">Notch</a> (soooo many comments) or Kevglass, between others, your game will be played (at least I will play them).</li>
<li>
Make a great game (the main idea of the LD), then people will start to make comments about it, tell to friends, make blog posts, etc.</li>
<li>Promote the game during the development by making blog posts on LD blog, record timelapse and stream your development, between other possibilities, this allows you to get a lot of players when the game is released. </li>
<li>
Promote it by making it easy to play, maybe an online mutiplatform version (applet or flash), if you make your game only for win7 with XNA 8.0 you will probably lose some potential players. Make a good gameplay video too so people could watch your game without having to play it, maybe you could even convince them to install XNA 8.0 to play your game <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>If you have time after development, play other LD games, rate them and make comments about them because this is one of the best ways to get other participants to play your game and, in the best case scenario, to rate it and even make comments.</li>
</ul>
<p>In conclusion, it always feels nice to participate in LD, and I am happy with the game I did Although I had not so much time to spend. Next time maybe I could do better.</p>
<p>Hope you like the post <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/13/ludum-dare-22-leave-me-alone-post-mortem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vampire Runner version 1.0.3 &#8211; some performance improvements</title>
		<link>http://blog.gemserk.com/2012/01/05/vampire-runner-version-1-0-3-some-performance-improvements/</link>
		<comments>http://blog.gemserk.com/2012/01/05/vampire-runner-version-1-0-3-some-performance-improvements/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 23:05:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[vampirerunner]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/2012/01/05/vampire-runner-version-1-0-3-some-performance-improvements/</guid>
		<description><![CDATA[Since the last update of Vampire Runner we were experiencing some notorious performance issues on the Android version and that is why we focused our efforts trying to improve it. The main problem was having some stuttering from time to time and some really bad fps on some devices. We updated Vampire Runner in the [...]]]></description>
			<content:encoded><![CDATA[<p>Since the last update of Vampire Runner we were experiencing some notorious performance issues on the Android version and that is why we focused our efforts trying to improve it. The main problem was having some stuttering from time to time and some really bad fps on some devices.</p>
<p>We updated Vampire Runner in the Android Market with all the improvements we made:</p>
<ul>
<li>Improved performance.</li>
<li>Improved graphics.</li>
<li>Removed the energy bar</li>
<li>Fixed the instructions texts to be clearer.</li>
</ul>
<p>Here is the QR-code if you want to easy access from your Android device:</p>
<div align="center">
<a href="https://market.android.com/details?id=com.gemserk.games.vampirerunner"><br />
<img src="http://qrcode.kaywa.com/img.php?s=4&#038;d=https%3A%2F%2Fmarket.android.com%2Fdetails%3Fid%3Dcom.gemserk.games.vampirerunner" alt="Vampire Runner Android Market" /> <img src="http://blog.gemserk.com/wp-content/uploads/2011/12/vampirerunner-icon.png" alt="Vampire Runner Icon" /><br />
</a><br />
<a href="https://market.android.com/details?id=com.gemserk.games.vampirerunner">Android Market</a>
</div>
<p>Hope this new version works better as it is working for us and enjoy the game.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/05/vampire-runner-version-1-0-3-some-performance-improvements/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modifying textures using libGDX Pixmap in runtime &#8211; Explained</title>
		<link>http://blog.gemserk.com/2012/01/04/modifying-textures-using-libgdx-pixmap-in-runtime-explained/</link>
		<comments>http://blog.gemserk.com/2012/01/04/modifying-textures-using-libgdx-pixmap-in-runtime-explained/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 13:58:08 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[libgdx]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[techniques]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2083</guid>
		<description><![CDATA[We have previously shown a bit how we were using LibGDX Pixmap to modify textures in runtime here and here for a game prototype we were doing. In this post I want to share more detail of how we do that. The objective was to make destructible terrain like in Worms 2. Introduction When you [...]]]></description>
			<content:encoded><![CDATA[<p>We have previously shown a bit how we were using LibGDX Pixmap to modify textures in runtime <a href="http://blog.gemserk.com/2011/10/06/modifying-textures-using-libgdx-pixmap-in-runtime/">here</a> and <a href="http://blog.gemserk.com/2011/10/10/detecting-collisions-using-libgdx-pixmap/">here</a> for a game prototype we were doing. In this post I want to share more detail of how we do that. The objective was to make destructible terrain like in Worms 2.</p>
<h3>Introduction</h3>
<p>When you work with OpenGL textures, you can&#8217;t directly modify their pixels whenever you want since they are on OpenGL context. To modify them you have to upload an array of bytes using glTexImage2D or glTexSubImage2D. The problem is you have to maintain on the application side an array of bytes representing the modifications you want to do. </p>
<p>To simplify working with byte arrays representing images, <a href="http://code.google.com/p/libgdx">LibGDX</a> provides a useful class named <a href="http://code.google.com/p/libgdx/source/browse/trunk/gdx/src/com/badlogic/gdx/graphics/Pixmap.java">Pixmap</a> which is a map of pixels kept in local memory with some methods to interact with a native library to perform all modifications with better performance.</p>
<h3>Moving data from Pixmap to OpenGL Texture</h3>
<p>In our prototypes, we wanted to remove part of the terrain whenever a missile touches it, like a Worms 2 explosion. That means we need some way to detect the collisions between the missile and the terrain and then a way to remove pixels from a texture.</p>
<p>We simplified the first problem by getting the color of the pixel only for the missile&#8217;s position and checking if it was transparent or not. A more correct solution could be using a bitmap mask to check collisions between pixels but we wanted to simplify the work for now.</p>
<p>For the second problem, given a radius of explosion of the missile, we used the pixmap fillCircle method by previously setting the color to (0,0,0,0) (fully transparent) and disabled Pixmap blending to override those pixels.</p>
<p>But that only modified the pixmap data, now we needed to modify the OpenGL texture. To do that, we called OpenGL glTexImage2D using the bytes of the pixmap as the new texture data and that worked correctly.</p>
<h3>Transforming from world coordinates to Pixmap coordinates</h3>
<p>One problem when working with pixmaps is we have to map world coordinates (the position of the missile for example) to coordinates inside the Pixmap.</p>
<p><a href="http://blog.gemserk.com/wp-content/uploads/2012/01/housecoordinates.png"><img src="http://blog.gemserk.com/wp-content/uploads/2012/01/housecoordinates.png" alt="" title="housecoordinates" width="259" height="197" class="aligncenter size-full wp-image-2113" /></a><br />
This image shows the coordinate system of the Pixmap, it goes from 0 to width in x and 0 to height in y.</p>
<p><a href="http://blog.gemserk.com/wp-content/uploads/2012/01/pixmap-screen.png"><img src="http://blog.gemserk.com/wp-content/uploads/2012/01/pixmap-screen-300x149.png" alt="" title="pixmap-screen" width="300" height="149" class="aligncenter size-medium wp-image-2115" /></a><br />
This image shows how we normally need to move, rotate and resize the Pixmap in a game.</p>
<p>To solve this, we are using a LibGDX <a href="http://code.google.com/p/libgdx/source/browse/trunk/gdx/src/com/badlogic/gdx/graphics/g2d/Sprite.java">Sprite</a> to maintain the Pixmap transformation, so we can easily move, rotate and scale it. Then, we can use that information to project a world coordinate to Pixmap coordinate by applying the inverse transform, here is the code:</p>
<pre>
	public void project(Vector2 position, float x, float y) {
		position.set(x, y);

		float centerX = sprite.getX() + sprite.getOriginX();
		float centerY = sprite.getY() + sprite.getOriginY();

		position.add(-centerX, -centerY);

		position.rotate(-sprite.getRotation());

		float scaleX = pixmap.getWidth() / sprite.getWidth();
		float scaleY = pixmap.getHeight() / sprite.getHeight();

		position.x *= scaleX;
		position.y *= scaleY;

		position.add( //
				pixmap.getWidth() * 0.5f, //
				-pixmap.getHeight() * 0.5f //
		);

		position.y *= -1f;
	}
</pre>
<p>(note: it is the first version at least, it could have bugs and could be improved also)</p>
<p>To simplify our work with all this stuff, we created a class named <a href="https://github.com/gemserk/angryships/blob/c497c2786594380dd195096a2af521e98566526a/angryships-core/src/main/java/com/gemserk/prototypes/pixmap/PixmapHelper.java">PixmapHelper</a> which manage a Pixmap, a Texture and a Sprite, so we could move the Sprite wherever we wanted to and if we modify the pixmap through the PixmapHelper then the Texture was automatically updated and hence the Sprite (since it uses internally the Texture).</p>
<p>The next video shows how we tested the previous work in a prototype were we simulated cluster bombs (similar to Worms 2):</p>
<div align="center">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/eOp6ggVBcGo" frameborder="0" allowFullScreen="true"> </iframe>
</div>
<h3>Some adjustments to improve performance</h3>
<p>Instead of always working with a full size Pixmap by modifying it and then moved to the OpenGL texture, we created smaller Pixmaps of fixed sizes: 32&#215;32, 64&#215;64, etc. Then, each time we needed to make an explosion, we used the best Pixmap for that explosion and then we called glTexSubImage2D instead glTexImage2D to avoid updating untouched pixels. One limitation of this modification is we have to create and maintain several fixed size pixmaps depending on the modification size. Our current greater quad is 256&#215;256 (almost never used).</p>
<p>Then, we changed to store each modification instead performing them in the moment the PixmapHelper erase method was called, and we added an update method which performs all modifications together. This improvement allow us to call Pixmap update method when we wanted, maybe one in three game updates or things like that.</p>
<h3>Conclusion</h3>
<p>Despite using LibGDX Pixmap for better performance, moving data to and from OpenGL context is not a cheap operation, on Android devices this could means some pauses when refreshing the modified textures with the new data. However, there is a lot of space for performance improvement, some ideas are to work only with pixmap of less bits instead RGBA8888 and use that one as the collisions context and as the mask of the real image (even using shaders), between other ideas.</p>
<p>Finally, the technique looks really nice and we believe that it could be used without problems for a simple game but it is not ready yet to manage a greater game like Worms 2.</p>
<p>Hope you like the technique and if you use it, maybe even also share your findings.</p>
<p>P.S.: In case you were wondering: yes, I love Worms 2.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/04/modifying-textures-using-libgdx-pixmap-in-runtime-explained/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Reusing Artemis entities by enabling, disabling and storing them</title>
		<link>http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/</link>
		<comments>http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 10:00:07 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[artemis]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[techniques]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[vampirerunner]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2062</guid>
		<description><![CDATA[As we mentioned on a previous post, we were having some performance issues in Vampire Runner and we were trying different approaches to improve its performance. Introduction One limitation of Android when making games is you have to avoid generating garbage whenever you can since the garbage collection would generate pauses on your games and [...]]]></description>
			<content:encoded><![CDATA[<p>As we mentioned on a <a href="http://blog.gemserk.com/2012/01/02/basic-frustum-culling-to-avoid-rendering-entities-outside-screen/">previous post</a>, we were having some performance issues in Vampire Runner and we were trying different approaches to improve its performance. </p>
<h3>Introduction</h3>
<p>One limitation of Android when making games is you have to avoid generating garbage whenever you can since the garbage collection would generate pauses on your games and that leads to a bad user experience. Then, we should try to reuse already created object instead of creating new ones.</p>
<p>In Vampire Runner, one problem we were having was that we were creating a lot of entities at a specific moment of the game, when we detected a new obstacle should be created, and that was making some pauses on the Android version.</p>
<p>As we use Artemis, we should try to reuse some entities when we can. For example, if we make a shooting game (like the <a href="http://blog.gemserk.com/2011/09/27/a-game-prototype-mad-jetpack/">Jetpac prototype</a> I made) it seems a good idea to reuse bullets since their life cycle is really short. <a href="http://www.ziggysgames.com/">Ziggy</a> made two blog posts about this topic some weeks ago <a href="http://www.ziggysgames.com/my-weapon-bullet-system-using-artemis-and-libgdx-box2d">here</a> and <a href="http://www.ziggysgames.com/weapon-bullet-system-part-2-recycling-dead-bullets">here</a>, however we followed a slightly different approach and we will explain it in this post.</p>
<h3>Storing entities to reuse them</h3>
<p>We created a concept named <a href="https://github.com/gemserk/commons-gdx/blob/master/commons-gdx-core/src/main/java/com/gemserk/commons/utils/Store.java">Store</a> (similar to LibGDX Pool<T> class) which let us easily store objects, in this case entities of one kind (for example bullets).</p>
<pre>
	free(T t) // returns an entity to the Store to be reused later

	get() : t // returns an entity from the Store, it reuses an object from the free
			collection if there is one or creates a new object otherwise.
</pre>
<p>The idea is to, for example, instead of creating a new bullet when a weapon is fired, calling store.get() and set the component values as they should be, and when the bullet collides with something call the store.free(e) instead of deleting the entity, so we can reuse it later.</p>
<p>This is a generic approach and we can use different stores to reuse different kind of entities but it has a big problem, those entities keep being in Artemis world, that means they keep being processed (collisions, render, etc). A basic solution to this problem was adding a new state to the entity, and we explain that in the following section.</p>
<h3>Enabling and disabling Artemis entities</h3>
<p>Artemis supports reuse of entities by internally caching created entities inside the World class, however their state (which components their have) is not easily reused, and that was one of the big problems when creating a new entity, we wanted to reuse their state. </p>
<p>Our current solution to the problem was adding a new state to the entities, if they are enabled or not. Being enabled means the entity is processed by all interested EntitySystems, being disabled means the entity is still in the Artemis world but it is not processed by any system.</p>
<p>So, in our customization of <a href="https://github.com/gemserk/artemis/tree/gemserk">Artemis</a> we added three new methods to Entity to be called whenever you want to enable or disable an entity:</p>
<pre>
	disable() : disables an entity to avoid it to be processed on EntitySystems

	enable() : enables again an entity to let it be processed on EntitySystems

	isEnabled() :  returns true if the entity is enabled, false otherwise.
</pre>
<p>Then, we added new methods to EntitySystem API to let each EntitySystem to be aware an entity of interest was enabled or disabled:</p>
<pre>
	disabled(Entity e) : called whenever an entity of this EntitySystem was disabled

	enabled(Entity e) : called whenever an entity of this EntitySystem was disabled
</pre>
<p>In our case, we are using them to enable and disable Box2D bodies in our PhysicsSystem, and also to remove them from our render layers in our RenderSystem.</p>
<p>As an example, we have a nice video of Vampire Runner we made by changing the zoom of the camera to see the behind the scenes:</p>
<div align="center">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/qPm7xAU0uTk" frameborder="0" allowFullScreen="true"> </iframe>
</div>
<p>As you can see, when entities like wall, fire and Christmas stuff are behind the main character, they disappear. That is because they are disabled and moved again to their stores so they stop being processed by Artemis, in particular, stop being rendered. </p>
<h3>Conclusion</h3>
<p>By combining both solutions, we have an easy way to reuse created entities of one kind, like our obstacles tiles in Vampire Runner, while at the same time we can disable them when they are on a store to avoid them being processed.</p>
<p>In case of Vampire Runner, this solution improved Vampire Runner performance since we now pre create a lot of entities we need during the game and then disable them and enable them only when needed, in this way, we could avoid creating a lot of entities in one update after the game was started.</p>
<p>This is a first approach solution to the problem and seems good for our current games but it may not fit other type of games or bigger games, we don&#8217;t know that yet.</p>
<p>If you use Artemis and you had this problem too, hope this blog post is helpful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/03/reusing-artemis-entities-by-enabling-disabling-and-storing-them/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Basic frustum culling to avoid rendering entities outside screen</title>
		<link>http://blog.gemserk.com/2012/01/02/basic-frustum-culling-to-avoid-rendering-entities-outside-screen/</link>
		<comments>http://blog.gemserk.com/2012/01/02/basic-frustum-culling-to-avoid-rendering-entities-outside-screen/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 17:43:15 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[artemis]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[techniques]]></category>
		<category><![CDATA[vampirerunner]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2055</guid>
		<description><![CDATA[As we were having some performance issues with Vampire Runner and we didn&#8217;t have a clear idea of what was happening, we started trying some improvement techniques. The first one we implemented was a basic frustum culling technique to avoid trying to render objects outside of the screen. Basic implementation First, we created an Artemis [...]]]></description>
			<content:encoded><![CDATA[<p>As we were having some performance issues with Vampire Runner and we didn&#8217;t have a clear idea of what was happening, we started trying some improvement techniques. The first one we implemented was a basic frustum culling technique to avoid trying to render objects outside of the screen.</p>
<h3>Basic implementation</h3>
<p>First, we created an Artemis component named FrustumCullingComponent with a Rectangle representing the bounds of that entity to easily detect if the entity is inside the screen or not. For now, as it is a basic implementation, the rectangle was only modified when the entity was created. So, for example, if we know an entity was able to rotate during the game, then we create a bigger bounding box using box diagonal.</p>
<p>Then, we added a method to our custom 2d Camera implementation to get the camera frustum (by making the corresponding transformations).</p>
<p>Finally, we modified our Artemis render system to check before rendering if an entity has or not a FrustumCullingComponent, if it hasn&#8217;t one, then we perform the render logic as we always did. If it has one, then we check if the bounds of that entity overlaps with the camera frustum, if it does, then we render as we always did, if it doesn&#8217;t, then we avoid rendering that entity.</p>
<p>Here is an example of the bounds and the frustum of the camera:</p>
<p><a href="http://blog.gemserk.com/wp-content/uploads/2012/01/frustum.png"><img src="http://blog.gemserk.com/wp-content/uploads/2012/01/frustum-300x135.png" alt="" title="frustum" width="300" height="135" class="aligncenter size-medium wp-image-2056" /></a></p>
<p>In the image, the element (a) and (b) are rendered because their bounds overlaps with the camera frustum. The element (c) is not rendered because its bounds are totally outside the camera frustum. </p>
<h3>Conclusion</h3>
<p>For Vampire Runner, we didn&#8217;t notice the difference of having this technique enabled or not since the game always render fast (on our devices) and we had no metrics of the render process time. However, as it was really easy to implement this basic version of the technique, we believe it should help to maintain render performance, and we can reuse the logic for all of our games.</p>
<p>As always, hope you like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2012/01/02/basic-frustum-culling-to-avoid-rendering-entities-outside-screen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Simulating parallax scrolling for 2d game</title>
		<link>http://blog.gemserk.com/2011/12/24/simulating-parallax-scrolling-for-2d-game/</link>
		<comments>http://blog.gemserk.com/2011/12/24/simulating-parallax-scrolling-for-2d-game/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 18:59:22 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[parallax]]></category>
		<category><![CDATA[techniques]]></category>
		<category><![CDATA[vampirerunner]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2039</guid>
		<description><![CDATA[In this post we want to share how we simulated parallax scrolling in Vampire Runner, a simple technique that could be used in any 2d game. Introduction The basic idea to simulate parallax is to work with different render layers and to move them at different speeds. To easily understand the post, we will work [...]]]></description>
			<content:encoded><![CDATA[<p>In this post we want to share how we simulated parallax scrolling in Vampire Runner, a simple technique that could be used in any 2d game.</p>
<h3>Introduction</h3>
<p>The basic idea to simulate parallax is to work with different render layers and to move them at different speeds. </p>
<p>To easily understand the post, we will work with a basic example based on Vampire Runner graphics where we have three layers, the first layer is the background which is static, the second layer are the mountains and the third layer is the world layer where the main character runs.</p>
<p><a href="http://blog.gemserk.com/wp-content/uploads/2011/12/vr-parallax.png"><img src="http://blog.gemserk.com/wp-content/uploads/2011/12/vr-parallax.png" alt="" title="vr-parallax" width="677" height="355" class="aligncenter size-full wp-image-2042" /></a></p>
<p>In Vampire Runner, the main character is the center of the world, despite being running, he is in a fixed position on the screen while all the other objects move accordingly to give the correct idea.</p>
<p>To simulate the parallax, each layer of objects moves at different speeds to give the correct idea of depth. In case of Vampire Runner, the background layer is static, the mountains layer moves at 1/12 the speed of the main character and the world layer moves at the speed of the main character.</p>
<h3>Simulating movement with cameras</h3>
<p>We said before that the character is in a fixed position on the screen, however the real entity of the character is moving around the world, even more, he is running!. </p>
<p>To simulate him being in a fixed position, we have a camera following the character, so the player always see the character in the same position. </p>
<p>However, as all the other objects (obstacles, trees, etc) have a fixed position in the world when the camera follows the main character they move in the opposite direction. That is how we move the world layer and the mountains layer. The only difference is we move the mountains layer camera slower.</p>
<p>In conclusion, we have one camera for each layer and two of them move following the main character.</p>
<h3>Using OpenGL model view matrices to configure the cameras</h3>
<p>As we are using OpenGL through LibGDX (and LWJGL on desktop), we need to translate all the previous camera behavior to OpenGL. </p>
<p>In OpenGL, to simulate a world camera what you typically modify the <a href="http://www.opengl.org/resources/faq/technical/viewing.htm">model view matrix</a> and then render the objects.</p>
<p>So, for Vampire Runner, we had three different matrices to render each layer, and the render method was something like this:</p>
<pre>
    1.1 configure background layer camera
    1.2 render background layer

    2.1 configure mountains layer camera
    2.2 render mountains layer

    3.1 configure world layer camera
    3.2 render world layer
</pre>
<p>In the update method we only had to update the cameras depending on the character position.</p>
<p>To simplify the work, if you are using LibGDX, you can use the <a href="http://code.google.com/p/libgdx/source/browse/trunk/gdx/src/com/badlogic/gdx/graphics/Camera.java">Camera</a> class which comes with a proper class for 2d games named <a href="http://code.google.com/p/libgdx/source/browse/trunk/gdx/src/com/badlogic/gdx/graphics/OrthographicCamera.java">OrthographicCamera</a>. In our case we used a custom implementation which provided a nicer API to work with.</p>
<h3>Conclusion</h3>
<p>Working with different cameras with OpenGL is not so hard and it let you achieve a correct feeling when moving across the world.</p>
<p>As always, hope you like the post. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2011/12/24/simulating-parallax-scrolling-for-2d-game/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Leave me Alone!!, my game for Ludum Dare 22</title>
		<link>http://blog.gemserk.com/2011/12/19/leave-me-alone-my-game-for-ludum-dare-22/</link>
		<comments>http://blog.gemserk.com/2011/12/19/leave-me-alone-my-game-for-ludum-dare-22/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 13:00:56 +0000</pubDate>
		<dc:creator>arielsan</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[ld22]]></category>
		<category><![CDATA[leavemealone]]></category>
		<category><![CDATA[ludumdare]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/?p=2031</guid>
		<description><![CDATA[To continue with tradition, I made a game for Ludum Dare 22. In this case, the theme was &#8220;alone&#8221;, and I made a game named Leave me alone!! (sadly, it seems like there are 3 or more games named that way). I had little time to spend making the game so I targeted a simple [...]]]></description>
			<content:encoded><![CDATA[<p>To continue with tradition, I made a game for <a href="http://www.ludumdare.com/compo/">Ludum Dare 22</a>. In this case, the theme was &#8220;alone&#8221;, and I made a game named <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2034">Leave me alone!!</a> (sadly, it seems like there are 3 or more games named that way).</p>
<p>I had little time to spend making the game so I targeted a simple game with almost no graphics nor sounds but fun.</p>
<p>The story behind the game is, you have to isolate a particle from other particles to keep the world safe, if they make contact then the world explodes in a mega hyper super duper explosion (use your imagination). </p>
<p>Here is a screenshot:</p>
<p><a href="http://blog.gemserk.com/wp-content/uploads/2011/12/al1-screenshot.png"><img src="http://blog.gemserk.com/wp-content/uploads/2011/12/al1-screenshot-300x180.png" alt="" title="al1-screenshot" width="300" height="180" class="aligncenter size-medium wp-image-2032" /></a></p>
<p>I recorded the timelapse but it was really boring so this time I will not upload it, however, I made a gameplay video:</p>
<div align="center">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="425" height="344" src="http://www.youtube.com/embed/0ZmSWawNO4c" frameborder="0" allowFullScreen="true"> </iframe>
</div>
<p>I will be happy if you can <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2034">play it</a>, and <a href="http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&#038;uid=2034">rate it</a> (if you participated ludum dare), and love it <img src='http://blog.gemserk.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Enjoy it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2011/12/19/leave-me-alone-my-game-for-ludum-dare-22/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vampire Runner Christmas Edition on Android Market</title>
		<link>http://blog.gemserk.com/2011/12/16/vampire-runner-christmas-edition-on-android-market/</link>
		<comments>http://blog.gemserk.com/2011/12/16/vampire-runner-christmas-edition-on-android-market/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 22:11:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Gemserk]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[openfeint]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[vampirerunner]]></category>

		<guid isPermaLink="false">http://blog.gemserk.com/2011/12/16/vampire-runner-christmas-edition-on-android-market/</guid>
		<description><![CDATA[We wanted to make something special for our most successful game and our players so we added some Christmas happiness to Vampire Runner: The changes for this version were: Christmas Theme &#8211; Presents, Trees, Christmas Hats, and Snow. Musics are disabled the first time you run the game, to avoid a bug between OpenFeint dialog [...]]]></description>
			<content:encoded><![CDATA[<p>We wanted to make something special for our most successful game and our players so we added some Christmas happiness to <a href="http://blog.gemserk.com/games/vampirerunner">Vampire Runner</a>:</p>
<p><img src="http://blog.gemserk.com/wp-content/uploads/2011/12/vampirerunner-main-01.png" alt="Vampire Runner" /></p>
<p>The changes for this version were:</p>
<ul>
<li>Christmas Theme &#8211; Presents, Trees, Christmas Hats, and Snow.</li>
<li>Musics are disabled the first time you run the game, to avoid a bug between OpenFeint dialog and LibGDX (you can enable the music in the main menu screen).</li>
<li>For the Android Version &#8211; We now support paging on our highscore screen so you can see more scores.</li>
<li>Created <a href="http://www.facebook.com/pages/Vampire-Runner/260666463994210" title="Vampire Runner">Vampire Runners Facebook Page</a> and added a button to go there from the Credits Screen.</li>
</ul>
<p>Here is the QR-code if you want to easy access from your Android device:</p>
<div align="center">
<a href="https://market.android.com/details?id=com.gemserk.games.vampirerunner"><br />
<img src="http://qrcode.kaywa.com/img.php?s=4&#038;d=https%3A%2F%2Fmarket.android.com%2Fdetails%3Fid%3Dcom.gemserk.games.vampirerunner" alt="Vampire Runner Android Market" /> <img src="http://blog.gemserk.com/wp-content/uploads/2011/12/vampirerunner-icon.png" alt="Vampire Runner Icon" /><br />
</a><br />
<a href="https://market.android.com/details?id=com.gemserk.games.vampirerunner">Android Market</a>
</div>
<p>If you installed and liked the game, please rate it on the market, and share it with your friends and everyone you know.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gemserk.com/2011/12/16/vampire-runner-christmas-edition-on-android-market/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

