<?xml version='1.0' encoding='UTF-8' ?><rss xmlns:content='http://purl.org/rss/1.0/modules/content/' version='2.0'><channel><title>oscan.net</title><link>http://oscan.net</link><description>News Feed for oscan.net</description><item><title>Santas Blizzard Blitz</title><link>http://oscan.net/?cmd=blog&amp;pid=26</link><description>&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;img src='http://oscan.net/files/sbb_100x100_3.png' alt='' title='' border=0 /&gt;&lt;/div&gt; So the game I showed in my last blog post has now been released; &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=santas%20blizzard%20blitz&amp;amp;linkId=12' class='link'&gt;Santas Blizzard Blitz&lt;/a&gt;. Unfortunately the game did not attract enough attention to get itself a sponsorship (I'm not going to pontificate on the reasons, but I know it has a few flaws), so I am once again going to release the game myself with ads. If it were a non-seasonal game I'd just let it sit and wait for something to come through, but for a Christmas themed game there is only a few weeks in the year where it would get any attention. Although the game did get one bid of $100, I felt I could easily make that on my own, especially since I have outstanding revenues from previous games that are currently below their payout thresholds.&lt;br&gt;&lt;br&gt;I'm not expecting great things from going this way, especially since I am using a few different ad networks to see how they perform, which will split any earnings (and risk not even reaching those payout thresholds). But hopefully MindJolt will once again come to the rescue; they will be publishing the game on Dec 22nd. Although from anecdotal evidence it seems their revenue from their ads is not what is once was, it will probably still make up the bulk of any plays/earnings. I'm also implementing their micro-payments system, so it will be interesting to see how that goes.&lt;br&gt;&lt;br&gt;And with that, there goes my last colour-matching puzzle game. It's now time to move on to something a bit more complicated.</description><pubDate>Tue, 13 Dec 2011 12:42:05 GMT</pubDate><content:encoded><![CDATA[ <div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><img src='http://oscan.net/files/sbb_100x100_3.png' alt='' title='' border=0 /></div> So the game I showed in my last blog post has now been released; <a href='http://oscan.net/index.php?cmd=page&amp;p=santas%20blizzard%20blitz&amp;linkId=12' class='link'>Santas Blizzard Blitz</a>. Unfortunately the game did not attract enough attention to get itself a sponsorship (I'm not going to pontificate on the reasons, but I know it has a few flaws), so I am once again going to release the game myself with ads. If it were a non-seasonal game I'd just let it sit and wait for something to come through, but for a Christmas themed game there is only a few weeks in the year where it would get any attention. Although the game did get one bid of $100, I felt I could easily make that on my own, especially since I have outstanding revenues from previous games that are currently below their payout thresholds.<br><br>I'm not expecting great things from going this way, especially since I am using a few different ad networks to see how they perform, which will split any earnings (and risk not even reaching those payout thresholds). But hopefully MindJolt will once again come to the rescue; they will be publishing the game on Dec 22nd. Although from anecdotal evidence it seems their revenue from their ads is not what is once was, it will probably still make up the bulk of any plays/earnings. I'm also implementing their micro-payments system, so it will be interesting to see how that goes.<br><br>And with that, there goes my last colour-matching puzzle game. It's now time to move on to something a bit more complicated. ]]></content:encoded></item><item><title>Christmas games and Fog of War</title><link>http://oscan.net/?cmd=blog&amp;pid=25</link><description>&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:right;float:right&quot;&gt;&lt;img src='http://oscan.net/files/ssbb2.png' alt='' title='' width='480' border=0 /&gt;&lt;/div&gt;It's been a while since I've finished and published a game, a bad habit to get in to, so I decided I should make something before I completely forget how it is all done. In order to give myself a relatively close deadline I am making a christmas game (to get a christmas themed game sponsored you need to ideally have it done by at least early November.)&lt;br&gt;&lt;br&gt;I'm dusting off an old redesign of Blockdown I had been tinkering with early in the year, keeping just and main matching mechanism but losing the block locking (so it can't really be considered 'Blockdown' anymore). One of the main problems I found with Blockdown was that when you made the 2x2 match the replacement block spawned directly in place rather than there being any cascading. This had been a concious decision at the time for... &lt;i&gt;some&lt;/i&gt; reason, but it ultimately led to the game being far too static and so not so interesting.&lt;br&gt;&lt;br&gt;Now I have altered it so that when you make a match the pieces from above cascade down into the empty spaces, and then the empty spaces left over from the dropping pieces are filled in from the sides. The new spawning pieces then come in from the sides.&lt;br&gt;&lt;br&gt;Also, I've slightly changed the matching so that not only are the 2x2-on-the-corners base match pieces removed, but also any adjacent pieces of the same type that are touching (and in turn any matching pieces adjacent to those pieces). This should make the board more dynamic and hopefully more enjoyable.&lt;br&gt;&lt;br&gt;The timer now takes the form of falling snow that builds up in columns on top of the grid. When pieces fall due to a match, they take the snow above with them. If any of the snow piles reaches the top of the screen, that's game over. This is kind of like the Ice Storm mode in Bejeweled 3, but I swear I had this idea before I had seen that! Really!&lt;br&gt;&lt;br&gt;I am also doing all the art for this myself (I had been determined that whatever my next game was I'd get somebody else - somebody competent! - to do the art).&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;img src='http://oscan.net/files/santa.png' alt='' title='' width='182' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;I think it is turning out okay for the most part; I particularly like my santa! I am drawing the outlines of everything in AutoCAD of all things (use what you've got and what you know!) and then bringing them over to PSP.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;In other news, prior to all of this I had been working on a custom game engine, focusing mainly on Line of Sight and Fog of War. Maaaybe something will eventually come of it...&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/oNLZ82HAbjg&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/oNLZ82HAbjg&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/files/tile_engine.png' alt='' title='' width='550' border=0 /&gt;&lt;br&gt;&lt;i&gt;Embedding shadow and collision vectors in to a tileset spritesheet&lt;/i&gt;&lt;/div&gt;</description><pubDate>Tue, 11 Oct 2011 4:43:18 GMT</pubDate><content:encoded><![CDATA[ <div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:right;float:right"><img src='http://oscan.net/files/ssbb2.png' alt='' title='' width='480' border=0 /></div>It's been a while since I've finished and published a game, a bad habit to get in to, so I decided I should make something before I completely forget how it is all done. In order to give myself a relatively close deadline I am making a christmas game (to get a christmas themed game sponsored you need to ideally have it done by at least early November.)<br><br>I'm dusting off an old redesign of Blockdown I had been tinkering with early in the year, keeping just and main matching mechanism but losing the block locking (so it can't really be considered 'Blockdown' anymore). One of the main problems I found with Blockdown was that when you made the 2x2 match the replacement block spawned directly in place rather than there being any cascading. This had been a concious decision at the time for... <i>some</i> reason, but it ultimately led to the game being far too static and so not so interesting.<br><br>Now I have altered it so that when you make a match the pieces from above cascade down into the empty spaces, and then the empty spaces left over from the dropping pieces are filled in from the sides. The new spawning pieces then come in from the sides.<br><br>Also, I've slightly changed the matching so that not only are the 2x2-on-the-corners base match pieces removed, but also any adjacent pieces of the same type that are touching (and in turn any matching pieces adjacent to those pieces). This should make the board more dynamic and hopefully more enjoyable.<br><br>The timer now takes the form of falling snow that builds up in columns on top of the grid. When pieces fall due to a match, they take the snow above with them. If any of the snow piles reaches the top of the screen, that's game over. This is kind of like the Ice Storm mode in Bejeweled 3, but I swear I had this idea before I had seen that! Really!<br><br>I am also doing all the art for this myself (I had been determined that whatever my next game was I'd get somebody else - somebody competent! - to do the art).<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><img src='http://oscan.net/files/santa.png' alt='' title='' width='182' border=0 /></div><br><br><br><br><br><br>I think it is turning out okay for the most part; I particularly like my santa! I am drawing the outlines of everything in AutoCAD of all things (use what you've got and what you know!) and then bringing them over to PSP.<br><br><br><br><br><br><br><br><br>In other news, prior to all of this I had been working on a custom game engine, focusing mainly on Line of Sight and Fog of War. Maaaybe something will eventually come of it...<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/oNLZ82HAbjg&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oNLZ82HAbjg&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></div><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/files/tile_engine.png' alt='' title='' width='550' border=0 /><br><i>Embedding shadow and collision vectors in to a tileset spritesheet</i></div> ]]></content:encoded></item><item><title>Numbers, numbers, numbers: Trinhex and Blockdown</title><link>http://oscan.net/?cmd=blog&amp;pid=24</link><description>So it's been a while since I posted anything about &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=trinhex&amp;amp;linkId=8' class='link'&gt;Trinhex&lt;/a&gt; and &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=Blockdown' class='link'&gt;Blockdown&lt;/a&gt;, the two flash games I made last year, so it is probably time for an update on how they have performed.&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;img src='http://oscan.net/trinhex_100x100.png' alt='' title='' width='100' height='100' border=0 /&gt;&lt;/div&gt; So when I had last posted about Trinhex, back in June, it had just been released after about four months of being available for sponsorship. The game didn't appear to attract much of any interest from sponsors on Flash Game License in the time it was up there; although it did get its fair share of views, it didn't get any bids. This could be as much a reflection on the genre than the game, with colour-matching games not being on the top of many people wish lists. The sponsor I did get was via posting the game over on mochi.&lt;br&gt;&lt;br&gt;That Primary license went for &lt;b&gt;$400&lt;/b&gt;. This was initially for an ad-free release, but a short while afterwards I was allowed to release it with ads. To date the ad revenue from mochi on Trinhex is &lt;b&gt;$22.56&lt;/b&gt;, form &lt;b&gt;51k&lt;/b&gt; ad impressions (but of course I'm not likely to see the mochi money for a looong time, as they only pay out once you reach a minimum of $100 with them, and my current total to date is only &lt;b&gt;$35.94&lt;/b&gt;, with a recent average of $0.03/day from only double figure impressions. It will take a few new games for them to ever pay out).&lt;br&gt;&lt;br&gt;The game also sold one site-lock Secondary license, which went for &lt;b&gt;$120&lt;/b&gt;.&lt;br&gt;&lt;br&gt;It also went up on Mindjolt in November, which required adding in their new advertisement system. This put the game up on a number of social networking sites, but the only one of any interest is of course Facebook. So far that has generated over &lt;b&gt;$445&lt;/b&gt;, of which &lt;b&gt;$387&lt;/b&gt; was paid out. Mindjolt also only pay out in minimum $100 intervals, so I'll need to make another $42 before I get paid again (and I am averaging about &lt;b&gt;$0.12&lt;/b&gt; to &lt;b&gt;$0.20&lt;/b&gt; a day recently). &lt;br&gt;Most of this success was from the game being on the main Mindjolt app page, but they also eventually released it as a standalone app on Facebook. This was apparently supposed to have generated a good bit of new traffic, as other games have done very well with it, but I haven't noticed any difference. So again I am unlikely to see the rest of that money unless I submit a new game, or a flood of new traffic miraculously comes in.&lt;br&gt;&lt;br&gt;It terms of views and plays, Trinhex has totalled &lt;b&gt;607k&lt;/b&gt; views and &lt;b&gt;707k&lt;/b&gt; plays. Of those &lt;b&gt;388k&lt;/b&gt; and &lt;b&gt;484k&lt;/b&gt;, respectively, were from Mindjolt. There is a slight discrepancy in those numbers as Mindjolts own metrics show &lt;b&gt;532k&lt;/b&gt; gameplays, which is a 9% difference from those shown by Playtomic, but a bit a difference is to be expected as Playtomic is an external service and you can't be guaranteed a connection. Incidentally, Mindjolt also show &lt;b&gt;431k&lt;/b&gt; ad impressions, which makes for an eCPM of &lt;b&gt;$1.03&lt;/b&gt;, not bad at all!&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;img src='http://oscan.net/blockdown_100x100.png' alt='' title='' width='100' height='100' border=0 /&gt;&lt;/div&gt; The last (and first) time I talked about Blockdown it was still available for sponsorship on FGL. Since the game is similar to Trinhex in many respects it suffered the same fate, if not worse (this will be a bit of a theme), on that site. It was up on FGL for longer, received fewer views and did not end up with any &lt;i&gt;serious&lt;/i&gt; bids and ultimately went without a Primary sponsorship deal. In the end I got tired of waiting and decided to release the game myself with ads to try and earn at least something.&lt;br&gt;&lt;br&gt;But that wasn't entirely the reason I decided stop waiting and release. I had an offer from Mindjolt for a site-lock version of the game. This was a deal for &lt;b&gt;$400&lt;/b&gt;! But in order to take that the game had to be released. I waited a small amount of time to see if there were any last minute bids, using the Last-Call feature on FGL to get some last minute attention, but none appeared.&lt;br&gt;&lt;br&gt;This deal meant that Mindjolt would get all ad revenue from the game, whereas if you go via the normal submission system there is a 50/50 split between Mindjolt and developer. This means they would be getting about $2 eCPM and so they needed at least 200k impressions to break even. While I don't have access to the same internal gameplay/impression metrics that I do for Trinhex, I do have &lt;a href='http://www.playtomic.com' class='link'&gt;Playtomic&lt;/a&gt; to tell me that Blockdown has done at least &lt;b&gt;342k&lt;/b&gt; views and &lt;b&gt;326k&lt;/b&gt; plays on Mindjolt alone. So they at the very least have made their money back.&lt;br&gt;&lt;br&gt;The interesting thing to note about those numbers, which are also reflected in the total numbers, is that the number of plays is less than the number of views. This is a bit odd and indicates that something isn't quite right.&lt;br&gt;The total numbers are &lt;b&gt;454k&lt;/b&gt; views and &lt;b&gt;395k&lt;/b&gt; plays; meaning that in the non-mindjolt numbers there is a wider disparity.&lt;br&gt;&lt;br&gt;There were certainly people for who their Flash player wasn't up to date enough and so they could never have played the game in the first place, but still would have registered a view. But that only amounted to about two thousand views.&lt;br&gt;&lt;br&gt;It could be that people did play but quit very early and so the 'play' never registered (I would have to check the specifics of the version of the API I was using at the time to see if that was a possibility). The 'bounce' rate, how many people quit within the first 30 seconds of a game, was higher for Blockdown, at 22.4%, compared to Trinhex at 14.5%.&lt;br&gt;&lt;br&gt;It may be that people took one look at the main screen and decided not to play at all.&lt;br&gt;&lt;br&gt;Or... there was a bug, which prevented people playing at all. It would be unfortunate if it was this.&lt;br&gt;&lt;br&gt;Blockdown went up on Mindjolt exactly one week before Trinhex, but as you can see did not do as well. It also has a lower overall average play time at &lt;b&gt;5:30&lt;/b&gt;, compared to &lt;b&gt;12:30&lt;/b&gt; for Trinhex. I attribute this to the fact that as a continuous game (as opposed to Trinhexs 5 matches per level) the game board was too static. &lt;br&gt;&lt;br&gt;I had made a conscious decision to not have cascading pieces after a match, ala Bejewled, instead just respawning pieces where the old pieces were matched. Another limiting aspect I feel was that you only ever matched four pieces. This ended up making the game too... well, boring.&lt;br&gt;&lt;br&gt;I have these rectified in a prototype for a different game that uses the same basic matching concept, which I think is much more interesting. Whether or not that will ever see the light of day is if I can decided on a graphical theme that will work.&lt;br&gt;&lt;br&gt;As far as non-Mindjolt money goes, for ad revenue from the 'primary' release it has earned a whopping &lt;b&gt;$9.35&lt;/b&gt;, from all of &lt;b&gt;35k&lt;/b&gt; impressions. So even with a better paying ad system than mochi, 'self sponsoring' a colour matching puzzle game just isn't worth it unless you have your own games portal to pimp, or you have a nice site-lock deal ready to take!&lt;br&gt;&lt;br&gt;The game also won &lt;b&gt;$100&lt;/b&gt; dollars from FGLs mobile Flash for Android competition. It was really more of a 'taking part' prize than a real 'prize'.&lt;br&gt;&lt;br&gt;&lt;br&gt;So... all in all the two games have totalled approximately &lt;b&gt;$1,510&lt;/b&gt;, of which I've been paid &lt;b&gt;$1,407&lt;/b&gt;. After commissions, transaction fees, and various exchange rates at different times that comes to &lt;b&gt;&amp;euro;945&lt;/b&gt; into my bank account.&lt;br&gt;&lt;br&gt;I think I can be reasonably happy with that and with over 1.1 millions combined gameplays for the two games. But of course there is much room for improvement, and I hopefully those improvement will be made!</description><pubDate>Sat, 26 Mar 2011 10:21:12 GMT</pubDate><content:encoded><![CDATA[ So it's been a while since I posted anything about <a href='http://oscan.net/index.php?cmd=page&amp;p=trinhex&amp;linkId=8' class='link'>Trinhex</a> and <a href='http://oscan.net/index.php?cmd=page&amp;p=Blockdown' class='link'>Blockdown</a>, the two flash games I made last year, so it is probably time for an update on how they have performed.<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><img src='http://oscan.net/trinhex_100x100.png' alt='' title='' width='100' height='100' border=0 /></div> So when I had last posted about Trinhex, back in June, it had just been released after about four months of being available for sponsorship. The game didn't appear to attract much of any interest from sponsors on Flash Game License in the time it was up there; although it did get its fair share of views, it didn't get any bids. This could be as much a reflection on the genre than the game, with colour-matching games not being on the top of many people wish lists. The sponsor I did get was via posting the game over on mochi.<br><br>That Primary license went for <b>$400</b>. This was initially for an ad-free release, but a short while afterwards I was allowed to release it with ads. To date the ad revenue from mochi on Trinhex is <b>$22.56</b>, form <b>51k</b> ad impressions (but of course I'm not likely to see the mochi money for a looong time, as they only pay out once you reach a minimum of $100 with them, and my current total to date is only <b>$35.94</b>, with a recent average of $0.03/day from only double figure impressions. It will take a few new games for them to ever pay out).<br><br>The game also sold one site-lock Secondary license, which went for <b>$120</b>.<br><br>It also went up on Mindjolt in November, which required adding in their new advertisement system. This put the game up on a number of social networking sites, but the only one of any interest is of course Facebook. So far that has generated over <b>$445</b>, of which <b>$387</b> was paid out. Mindjolt also only pay out in minimum $100 intervals, so I'll need to make another $42 before I get paid again (and I am averaging about <b>$0.12</b> to <b>$0.20</b> a day recently). <br>Most of this success was from the game being on the main Mindjolt app page, but they also eventually released it as a standalone app on Facebook. This was apparently supposed to have generated a good bit of new traffic, as other games have done very well with it, but I haven't noticed any difference. So again I am unlikely to see the rest of that money unless I submit a new game, or a flood of new traffic miraculously comes in.<br><br>It terms of views and plays, Trinhex has totalled <b>607k</b> views and <b>707k</b> plays. Of those <b>388k</b> and <b>484k</b>, respectively, were from Mindjolt. There is a slight discrepancy in those numbers as Mindjolts own metrics show <b>532k</b> gameplays, which is a 9% difference from those shown by Playtomic, but a bit a difference is to be expected as Playtomic is an external service and you can't be guaranteed a connection. Incidentally, Mindjolt also show <b>431k</b> ad impressions, which makes for an eCPM of <b>$1.03</b>, not bad at all!<br><br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><img src='http://oscan.net/blockdown_100x100.png' alt='' title='' width='100' height='100' border=0 /></div> The last (and first) time I talked about Blockdown it was still available for sponsorship on FGL. Since the game is similar to Trinhex in many respects it suffered the same fate, if not worse (this will be a bit of a theme), on that site. It was up on FGL for longer, received fewer views and did not end up with any <i>serious</i> bids and ultimately went without a Primary sponsorship deal. In the end I got tired of waiting and decided to release the game myself with ads to try and earn at least something.<br><br>But that wasn't entirely the reason I decided stop waiting and release. I had an offer from Mindjolt for a site-lock version of the game. This was a deal for <b>$400</b>! But in order to take that the game had to be released. I waited a small amount of time to see if there were any last minute bids, using the Last-Call feature on FGL to get some last minute attention, but none appeared.<br><br>This deal meant that Mindjolt would get all ad revenue from the game, whereas if you go via the normal submission system there is a 50/50 split between Mindjolt and developer. This means they would be getting about $2 eCPM and so they needed at least 200k impressions to break even. While I don't have access to the same internal gameplay/impression metrics that I do for Trinhex, I do have <a href='http://www.playtomic.com' class='link'>Playtomic</a> to tell me that Blockdown has done at least <b>342k</b> views and <b>326k</b> plays on Mindjolt alone. So they at the very least have made their money back.<br><br>The interesting thing to note about those numbers, which are also reflected in the total numbers, is that the number of plays is less than the number of views. This is a bit odd and indicates that something isn't quite right.<br>The total numbers are <b>454k</b> views and <b>395k</b> plays; meaning that in the non-mindjolt numbers there is a wider disparity.<br><br>There were certainly people for who their Flash player wasn't up to date enough and so they could never have played the game in the first place, but still would have registered a view. But that only amounted to about two thousand views.<br><br>It could be that people did play but quit very early and so the 'play' never registered (I would have to check the specifics of the version of the API I was using at the time to see if that was a possibility). The 'bounce' rate, how many people quit within the first 30 seconds of a game, was higher for Blockdown, at 22.4%, compared to Trinhex at 14.5%.<br><br>It may be that people took one look at the main screen and decided not to play at all.<br><br>Or... there was a bug, which prevented people playing at all. It would be unfortunate if it was this.<br><br>Blockdown went up on Mindjolt exactly one week before Trinhex, but as you can see did not do as well. It also has a lower overall average play time at <b>5:30</b>, compared to <b>12:30</b> for Trinhex. I attribute this to the fact that as a continuous game (as opposed to Trinhexs 5 matches per level) the game board was too static. <br><br>I had made a conscious decision to not have cascading pieces after a match, ala Bejewled, instead just respawning pieces where the old pieces were matched. Another limiting aspect I feel was that you only ever matched four pieces. This ended up making the game too... well, boring.<br><br>I have these rectified in a prototype for a different game that uses the same basic matching concept, which I think is much more interesting. Whether or not that will ever see the light of day is if I can decided on a graphical theme that will work.<br><br>As far as non-Mindjolt money goes, for ad revenue from the 'primary' release it has earned a whopping <b>$9.35</b>, from all of <b>35k</b> impressions. So even with a better paying ad system than mochi, 'self sponsoring' a colour matching puzzle game just isn't worth it unless you have your own games portal to pimp, or you have a nice site-lock deal ready to take!<br><br>The game also won <b>$100</b> dollars from FGLs mobile Flash for Android competition. It was really more of a 'taking part' prize than a real 'prize'.<br><br><br>So... all in all the two games have totalled approximately <b>$1,510</b>, of which I've been paid <b>$1,407</b>. After commissions, transaction fees, and various exchange rates at different times that comes to <b>&euro;945</b> into my bank account.<br><br>I think I can be reasonably happy with that and with over 1.1 millions combined gameplays for the two games. But of course there is much room for improvement, and I hopefully those improvement will be made! ]]></content:encoded></item><item><title>IGSDublin: Save The Zombies!</title><link>http://oscan.net/?cmd=blog&amp;pid=23</link><description>Last month I attended the first of what is hoped to be a series of monthly indie game developer events in Dublin called &lt;a href='http://www.facebook.com/pages/IndieGamesSpace/177419852299177' class='link'&gt;Indie Games Space&lt;/a&gt;, organised by &lt;a href='http://www.gamedevelopers.ie/home/' class='link'&gt;gamedevelopers.ie&lt;/a&gt; and held in &lt;a href='http://www.filmbase.ie/' class='link'&gt;Film Base&lt;/a&gt; in Temple Bar. It is a chance for independent developers to get together, show off their work, listen to a talk and work on a monthly design challenge (and get free t-shirts from the guys at havok! Thanks!).&lt;br&gt;&lt;br&gt;Last month, Paul Conway showed and talked about the development process of his great Dragon Age addon &lt;a href='http://social.bioware.com/project/2446/' class='link'&gt;Craggy Island&lt;/a&gt;.&lt;br&gt;For the challenge you could work in groups or solo (and being the unsocial hermit that I am, I went solo, naturally) to design and implement a game based on two themes. For this first challenge the themes were &lt;b&gt;disease pandemic&lt;/b&gt; and &lt;b&gt;failure&lt;/b&gt;. An extra 'unofficial' condition was then tagged on... &lt;b&gt;&lt;i&gt;&quot;no zombies&quot;&lt;/i&gt;&lt;/b&gt;! Blatant discrimination!&lt;br&gt;&lt;br&gt;Seeing as how there are already &lt;a href='http://www.crazymonkeygames.com/Pandemic-2.html' class='link'&gt;pandemic&lt;/a&gt; games dealing with the global scale, I started thinking on a more local scale, but still involving infection vectors in populations (yeah, so not really pandemic at all).&lt;br&gt;I had originally been thinking of having a virus trying to spread throughout a group, but being combated by a genetic 'cure' that was also spreading through the population. I was going along the lines of having single gene recessive/dominant phenotype resistance to the virus, so that there could be simple varying degrees of protection. This ended up getting a bit too complicated, including the need for a reproducing population and that would have just gotten messy, in more ways than one. It was also becoming more of a simulation and less of a game.&lt;br&gt;&lt;br&gt;So I ended up slightly reworking it so that it became VvV... Virus verses Virus. It is a two-player game where each player has to create a virus that infects and kills the &lt;i&gt;fewest&lt;/i&gt; amount of people. The virus with the lowest score wins (the &lt;b&gt;failure&lt;/b&gt; theme).&lt;br&gt;&lt;br&gt;So I made it...&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/files/savethezombies.png' alt='' title='' width='400' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=SaveTheZombies' class='link'&gt;Play Save the Zombies!&lt;/a&gt; (Flash)&lt;/div&gt;&lt;br&gt;&lt;br&gt;Ah... yeah, zombies.&lt;br&gt;I only used them as I was going to use the &lt;a href='http://oscan.net/index.php?cmd=blog&amp;amp;pid=22' class='link'&gt;isometric engine I had been making&lt;/a&gt; last year (and promptly ignored) and the only avatar spritesheets I had to hand were &lt;a href='http://www.youtube.com/watch?v=7kSE7-xdGX0&amp;amp;feature=player_detailpage#t=63s' class='link'&gt;Brookes Metaplace zombies&lt;/a&gt;, so I decided to use them. Otherwise it would have had to be squirrels! &lt;br&gt;&lt;br&gt;Players change a simple set of sliders to alter the attributes of the viruses, which effect how they spread and survive.&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/files/savethezombies_screen2.png' alt='' title='' width='600' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;span class=standard_text&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Range:&lt;/b&gt; is simply how close another zombie has to be before it possibly be infected by a contagious zombie.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Incubation:&lt;/b&gt; determines how soon a zombie becomes contagious after being infected (the smaller the bar the sooner)&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Infectiousness:&lt;/b&gt; is how aggressively a virus will try to infect&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Lethality:&lt;/b&gt; is how easily the virus will kill (this also plays a role with incubation time)&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Durability:&lt;/b&gt; is how well the virus can survive in the host zombie&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;Making one attribute less effective made others more effective.&lt;br&gt;&lt;br&gt;Each zombie gets both a random generic health and immunity values to help fight off the viruses, so there are differences from one zombie to the next on how they will cope.&lt;br&gt;&lt;br&gt;Another degree of randomness is the fact that zombies are constantly wandering around the map.&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/files/savethezombies_screen1.png' alt='' title='' width='640' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;i&gt;&quot;all we wanna do is infect your brains&quot;&lt;/i&gt;&lt;/div&gt;&lt;br&gt;Your initially infected zombie could walk into a corner and never spread its virus before it manages to get rid of it itself.&lt;br&gt;The game starts by randomly infecting one zombie for each virus. I probably should have allowed players to examine the initial state of the map and then select their preferred zombie to infect.&lt;br&gt;&lt;br&gt;Each infection scores one point, each death three. Each game takes a couple of minutes, although sometimes it can drag on when those damn brain eaters refuse to just die; the game ends when their are either no zombies left 'alive' or there are no current infections. Otherwise you can just end it prematurely.&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/files/savethezombies_infected.png' alt='' title='' width='135' border=0 /&gt; &lt;img src='http://oscan.net/files/savethezombies_contagious.png' alt='' title='' width='138' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;i&gt;Infected and contagious zombies... poor little things&lt;/i&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;So there it is. It's not at all balanced and there are probably some show-stopping bugs in there somewhere, but it works for the most part for me. Any feedback would be welcome. Comment below!&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=SaveTheZombies' class='link'&gt;&lt;span style='font-size:16'&gt;Play Save the Zombies!&lt;/span&gt;&lt;/a&gt; (Flash)&lt;/div&gt;&lt;br&gt;&lt;br&gt;I should probably get back to working on something that might make some money now. Speaking of which, I must post about how Trinhex and Blockdown have done since my last post.</description><pubDate>Wed, 16 Mar 2011 2:35:59 GMT</pubDate><content:encoded><![CDATA[ Last month I attended the first of what is hoped to be a series of monthly indie game developer events in Dublin called <a href='http://www.facebook.com/pages/IndieGamesSpace/177419852299177' class='link'>Indie Games Space</a>, organised by <a href='http://www.gamedevelopers.ie/home/' class='link'>gamedevelopers.ie</a> and held in <a href='http://www.filmbase.ie/' class='link'>Film Base</a> in Temple Bar. It is a chance for independent developers to get together, show off their work, listen to a talk and work on a monthly design challenge (and get free t-shirts from the guys at havok! Thanks!).<br><br>Last month, Paul Conway showed and talked about the development process of his great Dragon Age addon <a href='http://social.bioware.com/project/2446/' class='link'>Craggy Island</a>.<br>For the challenge you could work in groups or solo (and being the unsocial hermit that I am, I went solo, naturally) to design and implement a game based on two themes. For this first challenge the themes were <b>disease pandemic</b> and <b>failure</b>. An extra 'unofficial' condition was then tagged on... <b><i>"no zombies"</i></b>! Blatant discrimination!<br><br>Seeing as how there are already <a href='http://www.crazymonkeygames.com/Pandemic-2.html' class='link'>pandemic</a> games dealing with the global scale, I started thinking on a more local scale, but still involving infection vectors in populations (yeah, so not really pandemic at all).<br>I had originally been thinking of having a virus trying to spread throughout a group, but being combated by a genetic 'cure' that was also spreading through the population. I was going along the lines of having single gene recessive/dominant phenotype resistance to the virus, so that there could be simple varying degrees of protection. This ended up getting a bit too complicated, including the need for a reproducing population and that would have just gotten messy, in more ways than one. It was also becoming more of a simulation and less of a game.<br><br>So I ended up slightly reworking it so that it became VvV... Virus verses Virus. It is a two-player game where each player has to create a virus that infects and kills the <i>fewest</i> amount of people. The virus with the lowest score wins (the <b>failure</b> theme).<br><br>So I made it...<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/files/savethezombies.png' alt='' title='' width='400' border=0 /></div><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><a href='http://oscan.net/index.php?cmd=page&amp;p=SaveTheZombies' class='link'>Play Save the Zombies!</a> (Flash)</div><br><br>Ah... yeah, zombies.<br>I only used them as I was going to use the <a href='http://oscan.net/index.php?cmd=blog&amp;pid=22' class='link'>isometric engine I had been making</a> last year (and promptly ignored) and the only avatar spritesheets I had to hand were <a href='http://www.youtube.com/watch?v=7kSE7-xdGX0&amp;feature=player_detailpage#t=63s' class='link'>Brookes Metaplace zombies</a>, so I decided to use them. Otherwise it would have had to be squirrels! <br><br>Players change a simple set of sliders to alter the attributes of the viruses, which effect how they spread and survive.<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/files/savethezombies_screen2.png' alt='' title='' width='600' border=0 /></div><br><span class=standard_text><ul><li><b>Range:</b> is simply how close another zombie has to be before it possibly be infected by a contagious zombie.<br></li><li><b>Incubation:</b> determines how soon a zombie becomes contagious after being infected (the smaller the bar the sooner)<br></li><li><b>Infectiousness:</b> is how aggressively a virus will try to infect<br></li><li><b>Lethality:</b> is how easily the virus will kill (this also plays a role with incubation time)<br></li><li><b>Durability:</b> is how well the virus can survive in the host zombie</li></ul></span>Making one attribute less effective made others more effective.<br><br>Each zombie gets both a random generic health and immunity values to help fight off the viruses, so there are differences from one zombie to the next on how they will cope.<br><br>Another degree of randomness is the fact that zombies are constantly wandering around the map.<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/files/savethezombies_screen1.png' alt='' title='' width='640' border=0 /></div><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><i>"all we wanna do is infect your brains"</i></div><br>Your initially infected zombie could walk into a corner and never spread its virus before it manages to get rid of it itself.<br>The game starts by randomly infecting one zombie for each virus. I probably should have allowed players to examine the initial state of the map and then select their preferred zombie to infect.<br><br>Each infection scores one point, each death three. Each game takes a couple of minutes, although sometimes it can drag on when those damn brain eaters refuse to just die; the game ends when their are either no zombies left 'alive' or there are no current infections. Otherwise you can just end it prematurely.<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/files/savethezombies_infected.png' alt='' title='' width='135' border=0 /> <img src='http://oscan.net/files/savethezombies_contagious.png' alt='' title='' width='138' border=0 /></div><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><i>Infected and contagious zombies... poor little things</i></div><br><br>So there it is. It's not at all balanced and there are probably some show-stopping bugs in there somewhere, but it works for the most part for me. Any feedback would be welcome. Comment below!<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><a href='http://oscan.net/index.php?cmd=page&amp;p=SaveTheZombies' class='link'><span style='font-size:16'>Play Save the Zombies!</span></a> (Flash)</div><br><br>I should probably get back to working on something that might make some money now. Speaking of which, I must post about how Trinhex and Blockdown have done since my last post. ]]></content:encoded></item><item><title>Game Dev progress report: Progress!</title><link>http://oscan.net/?cmd=blog&amp;pid=22</link><description>&lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=trinhex&amp;amp;linkId=8' class='link'&gt;Trinhex&lt;/a&gt; is &lt;b&gt;&lt;i&gt;finally&lt;/i&gt;&lt;/b&gt; out in the wild!&lt;br&gt;&lt;br&gt;My thanks to Lisandro from &lt;a href='http://www.7lay.net' class='link'&gt;7lay.net&lt;/a&gt; for being willing to sponsor the game, and for being so patient during the whole bidding process, which I allowed go for... a while :).&lt;br&gt;&lt;br&gt;Starting into its fifth day of being published the game has racked up almost 20k plays so far on about 130 sites. On &lt;a href='http://www.newgrounds.com/portal/view/538695' class='link'&gt;Newgrounds&lt;/a&gt; it managed to get a rating of 3.43/5 with about 1,400 plays before falling into the black hole of obscurity. On &lt;a href='http://www.kongregate.com/games/oscan/trinhex' class='link'&gt;Kongregate&lt;/a&gt; it scored about 2.8 after 965 plays to date, with the last few hundred plays thanks to a &lt;a href='http://www.raphkoster.com/2010/06/10/trinhex/' class='link'&gt;post from Raph&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:right;float:right&quot;&gt;&lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=Blockdown' class='link'&gt;&lt;img src='http://oscan.net/blockdown_100x100.png' alt='' title='' width='100' border=0 /&gt;&lt;/a&gt;&lt;/div&gt;Game 'number 3', that I had been prototyping at the time of the last post and that is now known as &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=Blockdown' class='link'&gt;Blockdown&lt;/a&gt; (&lt;a href='http://www.flashgamelicense.com/view_game.php?game_id=10427&amp;amp;from=dev' class='link'&gt;FGL link&lt;/a&gt;), has been completed for a while and is waiting to see if it can pick up a potential sponsor. We seem to be in a bit of an early summer lull for the flash sponsorship market, so it may have to wait a while longer. Although my games appear to be in a constant lull in terms of attracting sponsor interest. :)&lt;br&gt;&lt;br&gt;&lt;br&gt;In the meantime, I've been &lt;i&gt;slowly&lt;/i&gt; working away on an isometric engine for a possible Tower Defense-esque game...&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-gXZ2JLh8Ic&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-gXZ2JLh8Ic&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;</description><pubDate>Sun, 13 Jun 2010 4:00:47 GMT</pubDate><content:encoded><![CDATA[ <a href='http://oscan.net/index.php?cmd=page&amp;p=trinhex&amp;linkId=8' class='link'>Trinhex</a> is <b><i>finally</i></b> out in the wild!<br><br>My thanks to Lisandro from <a href='http://www.7lay.net' class='link'>7lay.net</a> for being willing to sponsor the game, and for being so patient during the whole bidding process, which I allowed go for... a while :).<br><br>Starting into its fifth day of being published the game has racked up almost 20k plays so far on about 130 sites. On <a href='http://www.newgrounds.com/portal/view/538695' class='link'>Newgrounds</a> it managed to get a rating of 3.43/5 with about 1,400 plays before falling into the black hole of obscurity. On <a href='http://www.kongregate.com/games/oscan/trinhex' class='link'>Kongregate</a> it scored about 2.8 after 965 plays to date, with the last few hundred plays thanks to a <a href='http://www.raphkoster.com/2010/06/10/trinhex/' class='link'>post from Raph</a>.<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:right;float:right"><a href='http://oscan.net/index.php?cmd=page&amp;p=Blockdown' class='link'><img src='http://oscan.net/blockdown_100x100.png' alt='' title='' width='100' border=0 /></a></div>Game 'number 3', that I had been prototyping at the time of the last post and that is now known as <a href='http://oscan.net/index.php?cmd=page&amp;p=Blockdown' class='link'>Blockdown</a> (<a href='http://www.flashgamelicense.com/view_game.php?game_id=10427&amp;from=dev' class='link'>FGL link</a>), has been completed for a while and is waiting to see if it can pick up a potential sponsor. We seem to be in a bit of an early summer lull for the flash sponsorship market, so it may have to wait a while longer. Although my games appear to be in a constant lull in terms of attracting sponsor interest. :)<br><br><br>In the meantime, I've been <i>slowly</i> working away on an isometric engine for a possible Tower Defense-esque game...<br><br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/-gXZ2JLh8Ic&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-gXZ2JLh8Ic&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></div> ]]></content:encoded></item><item><title>Game Dev progress report: Lacking progress...</title><link>http://oscan.net/?cmd=blog&amp;pid=20</link><description>It's been just over six weeks since I released my first attempt at monetising a complete flash game, &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=pompetaire&amp;amp;linkId=6' class='link'&gt;Pompetaire&lt;/a&gt;, out into the wild. This game just had a pre-loader ad attached (no attempts at finding sponsorship were made) and was uploaded to Kongregate (no ads), Newgrounds and added to Mochi's distribution list.&lt;br&gt;&lt;br&gt;To date the game has earned a grand total of.... wait for it..... &lt;b&gt;$2.37!&lt;/b&gt;&lt;br&gt;$0.85 of that comes from Kongregate from 666 plays (35% of a total revenue of $2.42) all of which were mostly from the first week, with the rest, $1.52, coming from MochiAds from just under five thousand ad impressions. Over a third of the mochi earnings came from a single site, &lt;a href='http://onlinespiele24.org' class='link'&gt;onlinespiele24.org&lt;/a&gt;, which only picked up the game over three weeks after the game was first released.&lt;br&gt;&lt;br&gt;Suffice to say the game never &quot;gained traction&quot;, to borrow Metaplace's phrase, with reviews being decidedly average, hovering just above the 50% mark. &lt;br&gt;&lt;br&gt;So all in all a failure!&lt;br&gt;&lt;br&gt;But with every failure there are lessons to be learnt, some of which I had in mind when putting together my next game &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=Trinhex' class='link'&gt;Trinhex&lt;/a&gt;.&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/trinhex_screen4.png' alt='' title='' border=0 /&gt;&lt;br&gt;&lt;i&gt;Spot the reused assets!&lt;/i&gt;&lt;/div&gt;&lt;br&gt;This is a colour matching game based upon Raph Koster's original game Wheelwright&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;a href='http://oscan.net/files/wheelwright.jpg' class='link'&gt;&lt;img src='http://oscan.net/files/wheelwright.jpg' alt='' title='' width='200' border=0 /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;This time I decided to take the sponsorship/licensing route by using &lt;a href='http://www.flashgamelicense.com/' class='link'&gt;FlashGameLicense.com&lt;/a&gt;, which can provide the potential of a few thousand US dollars per game, assuming you can manage to entice a sponsor to put in a bid. So far the game has been &lt;a href='http://www.flashgamelicense.com/view_game.php?game_id=9791' class='link'&gt;available to potential sponsors&lt;/a&gt; for just over two weeks now with no solid offers, but it is still considered too early to say how it will do. It may take up to a month or two before the right sponsor comes along.&lt;br&gt;&lt;br&gt;In the mean time I am working away on game number 3...&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='http://oscan.net/game4.png' alt='' title='' border=0 /&gt;&lt;/div&gt;</description><pubDate>Thu, 04 Mar 2010 7:31:11 GMT</pubDate><content:encoded><![CDATA[ It's been just over six weeks since I released my first attempt at monetising a complete flash game, <a href='http://oscan.net/index.php?cmd=page&amp;p=pompetaire&amp;linkId=6' class='link'>Pompetaire</a>, out into the wild. This game just had a pre-loader ad attached (no attempts at finding sponsorship were made) and was uploaded to Kongregate (no ads), Newgrounds and added to Mochi's distribution list.<br><br>To date the game has earned a grand total of.... wait for it..... <b>$2.37!</b><br>$0.85 of that comes from Kongregate from 666 plays (35% of a total revenue of $2.42) all of which were mostly from the first week, with the rest, $1.52, coming from MochiAds from just under five thousand ad impressions. Over a third of the mochi earnings came from a single site, <a href='http://onlinespiele24.org' class='link'>onlinespiele24.org</a>, which only picked up the game over three weeks after the game was first released.<br><br>Suffice to say the game never "gained traction", to borrow Metaplace's phrase, with reviews being decidedly average, hovering just above the 50% mark. <br><br>So all in all a failure!<br><br>But with every failure there are lessons to be learnt, some of which I had in mind when putting together my next game <a href='http://oscan.net/index.php?cmd=page&amp;p=Trinhex' class='link'>Trinhex</a>.<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/trinhex_screen4.png' alt='' title='' border=0 /><br><i>Spot the reused assets!</i></div><br>This is a colour matching game based upon Raph Koster's original game Wheelwright<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><a href='http://oscan.net/files/wheelwright.jpg' class='link'><img src='http://oscan.net/files/wheelwright.jpg' alt='' title='' width='200' border=0 /></a></div><br><br>This time I decided to take the sponsorship/licensing route by using <a href='http://www.flashgamelicense.com/' class='link'>FlashGameLicense.com</a>, which can provide the potential of a few thousand US dollars per game, assuming you can manage to entice a sponsor to put in a bid. So far the game has been <a href='http://www.flashgamelicense.com/view_game.php?game_id=9791' class='link'>available to potential sponsors</a> for just over two weeks now with no solid offers, but it is still considered too early to say how it will do. It may take up to a month or two before the right sponsor comes along.<br><br>In the mean time I am working away on game number 3...<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='http://oscan.net/game4.png' alt='' title='' border=0 /></div> ]]></content:encoded></item><item><title>ThatFallingBlockGame source</title><link>http://oscan.net/?cmd=blog&amp;pid=19</link><description>I've posted the &lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=thatfallingblockgame&amp;amp;linkId=7' class='link'&gt;complete source&lt;/a&gt; to my Metaplace tetris clone, That Falling Block Game, under the games section.</description><pubDate>Mon, 08 Feb 2010 4:49:55 GMT</pubDate><content:encoded><![CDATA[ I've posted the <a href='http://oscan.net/index.php?cmd=page&amp;p=thatfallingblockgame&amp;linkId=7' class='link'>complete source</a> to my Metaplace tetris clone, That Falling Block Game, under the games section. ]]></content:encoded></item><item><title>Pompetaire: Game finished and published!</title><link>http://oscan.net/?cmd=blog&amp;pid=18</link><description>&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;div style='display: block;margin-left: auto;margin-right: auto;width:100; height:100'&gt;&lt;img src='http://oscan.net/pompetaire_thumb.png' alt='' title='' width='100' height='100' border=0 /&gt;&lt;DIV STYLE=&quot;position:relative; z-index:2;margin-top: -100px;width:100; height:100;&quot;&gt;&lt;img src='./img/soft_border.png' width='100' height='100' border=0 /&gt;&lt;/DIV&gt;&lt;/div&gt;&lt;/div&gt;Okay, so it was a little bit over two weeks...&lt;br&gt;&lt;br&gt;The game is now &quot;finished&quot; and has been sent out to fend for itself in the thunderdome that is the net. I hope it doesn't get too savagely beaten!&lt;br&gt;&lt;br&gt;It is currently awaiting approval to be added to Mochis Partner Publisher list and is also up on &lt;a href='http://www.kongregate.com/games/oscan/pompetaire' class='link'&gt;Kongregate&lt;/a&gt;. The relative success of the game on Kongregate will depend mainly on the rating it gets from the community there, so feel free to sign up and give it a 5-star rating! And then get everyone you know to do the same. ;-)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description><pubDate>Tue, 19 Jan 2010 5:24:28 GMT</pubDate><content:encoded><![CDATA[ <div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><div style='display: block;margin-left: auto;margin-right: auto;width:100; height:100'><img src='http://oscan.net/pompetaire_thumb.png' alt='' title='' width='100' height='100' border=0 /><DIV STYLE="position:relative; z-index:2;margin-top: -100px;width:100; height:100;"><img src='./img/soft_border.png' width='100' height='100' border=0 /></DIV></div></div>Okay, so it was a little bit over two weeks...<br><br>The game is now "finished" and has been sent out to fend for itself in the thunderdome that is the net. I hope it doesn't get too savagely beaten!<br><br>It is currently awaiting approval to be added to Mochis Partner Publisher list and is also up on <a href='http://www.kongregate.com/games/oscan/pompetaire' class='link'>Kongregate</a>. The relative success of the game on Kongregate will depend mainly on the rating it gets from the community there, so feel free to sign up and give it a 5-star rating! And then get everyone you know to do the same. ;-)<br><br><br><br><br> ]]></content:encoded></item><item><title>Flash Game: Pompetaire... almost there</title><link>http://oscan.net/?cmd=blog&amp;pid=17</link><description>I'm now over halfway through the second week of my self-imposed two week time limit for &lt;a href='http://oscan.net/index.php?cmd=blog&amp;amp;pid=16' class='link'&gt;creating a flash game&lt;/a&gt;. I'm mainly in polishing mode now, making everything look pretty. Apart from the ads, which I have yet to put in, it is probably 90% there.&lt;br&gt;&lt;br&gt;I've also decided on a name. &lt;b&gt;Pompetaire!&lt;/b&gt; I guess I probably have to explain that...&lt;br&gt;Since the game is basically Spider Solitaire, I decided I'd call it &lt;i&gt;something&lt;/i&gt;-taire; it was just a matter of figuring out what the &lt;i&gt;something&lt;/i&gt; should be. As things in the game are mostly grouped into lots of five, I thought perhaps &lt;i&gt;Pentaire&lt;/i&gt; or &lt;i&gt;Quintaire&lt;/i&gt;. Although Pentaire doesn't exist, there is a Pentair, which is a water services equipment supplier, so that was a bit too close. Quintaire appears to be a surname (or sometimes a first name).&lt;br&gt;&lt;br&gt;I ended up going a bit more obscure and decided to use the &lt;a href='http://en.wikipedia.org/wiki/Oscan_language' class='link'&gt;oscan&lt;/a&gt; word for five, which is &lt;i&gt;pompe&lt;/i&gt;, so I end up with &lt;i&gt;Pompetaire&lt;/i&gt;. As far as google is concerned this word simply doesn't exist. At all. This has the added benefit of allowing me to be able to track the spread of the game by searching for any mentions of the word used on the net (not that I have high hopes that it will spread far and wide).&lt;br&gt;&lt;br&gt;So here we have the &lt;i&gt;almost there&lt;/i&gt; version...&lt;br&gt;&lt;br&gt;[edit]&lt;br&gt;&lt;a href='http://oscan.net/index.php?cmd=page&amp;amp;p=pompetaire&amp;amp;linkId=6' class='link'&gt;Link to final version&lt;/a&gt;&lt;br&gt;[/edit]&lt;br&gt;&lt;br&gt;I still have a few questions for myself on the gameplay - as to whether it is perhaps a bit too easy - so again &lt;b&gt;I would greatly appreciate feedback from play experiences at various levels!&lt;/b&gt;&lt;br&gt;&lt;br&gt;In this version the 'strict' and 'non-strict' rules are merged; where a 'strict' move, as indicated by the green placement guide, only costs one point per move, and a 'non-strict' move, as indicated by the red placement guide, costs 5 points per move. I am toying with the idea that I should only allow up to 5 non-strict moves per game, so it would be up to the player to decide when best to use those moves. All assuming the current version doesn't provide enough challenge.&lt;br&gt;&lt;br&gt;Thanks for your help!</description><pubDate>Thu, 14 Jan 2010 11:19:46 GMT</pubDate><content:encoded><![CDATA[ I'm now over halfway through the second week of my self-imposed two week time limit for <a href='http://oscan.net/index.php?cmd=blog&amp;pid=16' class='link'>creating a flash game</a>. I'm mainly in polishing mode now, making everything look pretty. Apart from the ads, which I have yet to put in, it is probably 90% there.<br><br>I've also decided on a name. <b>Pompetaire!</b> I guess I probably have to explain that...<br>Since the game is basically Spider Solitaire, I decided I'd call it <i>something</i>-taire; it was just a matter of figuring out what the <i>something</i> should be. As things in the game are mostly grouped into lots of five, I thought perhaps <i>Pentaire</i> or <i>Quintaire</i>. Although Pentaire doesn't exist, there is a Pentair, which is a water services equipment supplier, so that was a bit too close. Quintaire appears to be a surname (or sometimes a first name).<br><br>I ended up going a bit more obscure and decided to use the <a href='http://en.wikipedia.org/wiki/Oscan_language' class='link'>oscan</a> word for five, which is <i>pompe</i>, so I end up with <i>Pompetaire</i>. As far as google is concerned this word simply doesn't exist. At all. This has the added benefit of allowing me to be able to track the spread of the game by searching for any mentions of the word used on the net (not that I have high hopes that it will spread far and wide).<br><br>So here we have the <i>almost there</i> version...<br><br>[edit]<br><a href='http://oscan.net/index.php?cmd=page&amp;p=pompetaire&amp;linkId=6' class='link'>Link to final version</a><br>[/edit]<br><br>I still have a few questions for myself on the gameplay - as to whether it is perhaps a bit too easy - so again <b>I would greatly appreciate feedback from play experiences at various levels!</b><br><br>In this version the 'strict' and 'non-strict' rules are merged; where a 'strict' move, as indicated by the green placement guide, only costs one point per move, and a 'non-strict' move, as indicated by the red placement guide, costs 5 points per move. I am toying with the idea that I should only allow up to 5 non-strict moves per game, so it would be up to the player to decide when best to use those moves. All assuming the current version doesn't provide enough challenge.<br><br>Thanks for your help! ]]></content:encoded></item><item><title>Help Play test a Flash game!</title><link>http://oscan.net/?cmd=blog&amp;pid=16</link><description>&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left&quot;&gt;&lt;div style='display: block;margin-left: auto;margin-right: auto;width:203; height:175'&gt;&lt;img src='http://oscan.net/game2_proto.png' alt='' title='' width='203' height='175' border=0 /&gt;&lt;DIV STYLE=&quot;position:relative; z-index:2;margin-top: -175px;width:203; height:175;&quot;&gt;&lt;img src='./img/soft_border.png' width='203' height='175' border=0 /&gt;&lt;/DIV&gt;&lt;/div&gt;&lt;/div&gt; On Monday I started my effort to &lt;a href='http://oscan.net/index.php?cmd=blog&amp;amp;pid=14' class='link'&gt;complete a flash game in two weeks&lt;/a&gt;, making a simple Spider-Solitaire-as-a-colour-matching-game... game.&lt;br&gt;For this project, the intent is not necessarily to make the most engaging play experience ever, but simply to just get a finished, polished game posted on a game portal site. That being said, I'd still like for the game to be somewhat fun to play, so I'd like to get feedback from some play testing, if you would be so kind to give it a shot please?&lt;br&gt;&lt;br&gt;Below is a working prototype (meaning it won't look like much, as it is all place-holder graphics, but the gameplay is mostly all there) that I've put together in the two and a half days since getting started.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;[edit: prototype removed. see &lt;a href='http://oscan.net/index.php?cmd=blog&amp;amp;pid=17' class='link'&gt;post above&lt;/a&gt;]&lt;br&gt;How to play: &lt;span class=standard_text&gt;&lt;ul&gt;&lt;li&gt;To win a game you need to clear the board of all pieces.&lt;br&gt;&lt;/li&gt;&lt;li&gt;To clear pieces you need to stack shapes of the same colour in increasing 'size' from top to bottom.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Shape 'sizes' in order, ranging from 1 to 5, are circle, oval, triangle, square and pentagon. So you want circles on the top of the stack, pentagons at the bottom. &lt;br&gt;(This will hopefully be more intuitive with final graphics)&lt;br&gt;&lt;/li&gt;&lt;li&gt;You can place a shape on top of another shape of the next size up regardless of colour (e.g. triangle on a square, square on a pentagon).&lt;br&gt;&lt;/li&gt;&lt;li&gt;If you disable the 'strict' setting, you can place a shape on top of &lt;i&gt;any&lt;/i&gt; larger shape (e.g. circle on a square)&lt;br&gt;&lt;/li&gt;&lt;li&gt;You can only move multiple shapes at the same time (moving one shape and everything above it) if all the shapes are of the same colour and in the correct order.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Not all of the pieces are on the board at the beginning. You need to choose when to 'deal' in these additional pieces, which will be added to the top of each column.&lt;br&gt;&lt;/li&gt;&lt;li&gt;A column cannot go more than 12 pieces high. If a column is 12 high, it will block the next deal.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If you find yourself not able to make a move then you lost that game (no prompt as yet)&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;br&gt;That's the basics of it. It's not too hard to understand once you go through it once.&lt;br&gt;&lt;br&gt;There are three levels: easy with just one colour, medium with two, and hard with four (it starts on medium).&lt;br&gt;If you have some time to perhaps play through a few games of each, with and without the strict setting, I'd greatly appreciate it if you could give some feedback below. Was it challenging? Was it fun to play? Or only somewhat? Completely boring? I hate these games!&lt;br&gt;&lt;br&gt;There are likely to be a few bugs floating about, so if you run into any if you could mention them below too would be a great help.&lt;br&gt;&lt;br&gt;Thanks for your help!&lt;br&gt;&lt;br&gt;[edit]&lt;br&gt;updated the graphics a bit to make it a bit easier on the colour blind.</description><pubDate>Wed, 06 Jan 2010 6:52:50 GMT</pubDate><content:encoded><![CDATA[ <div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:left;float:left"><div style='display: block;margin-left: auto;margin-right: auto;width:203; height:175'><img src='http://oscan.net/game2_proto.png' alt='' title='' width='203' height='175' border=0 /><DIV STYLE="position:relative; z-index:2;margin-top: -175px;width:203; height:175;"><img src='./img/soft_border.png' width='203' height='175' border=0 /></DIV></div></div> On Monday I started my effort to <a href='http://oscan.net/index.php?cmd=blog&amp;pid=14' class='link'>complete a flash game in two weeks</a>, making a simple Spider-Solitaire-as-a-colour-matching-game... game.<br>For this project, the intent is not necessarily to make the most engaging play experience ever, but simply to just get a finished, polished game posted on a game portal site. That being said, I'd still like for the game to be somewhat fun to play, so I'd like to get feedback from some play testing, if you would be so kind to give it a shot please?<br><br>Below is a working prototype (meaning it won't look like much, as it is all place-holder graphics, but the gameplay is mostly all there) that I've put together in the two and a half days since getting started.<br><br><br><br><br><br>[edit: prototype removed. see <a href='http://oscan.net/index.php?cmd=blog&amp;pid=17' class='link'>post above</a>]<br>How to play: <span class=standard_text><ul><li>To win a game you need to clear the board of all pieces.<br></li><li>To clear pieces you need to stack shapes of the same colour in increasing 'size' from top to bottom.<br></li><li>Shape 'sizes' in order, ranging from 1 to 5, are circle, oval, triangle, square and pentagon. So you want circles on the top of the stack, pentagons at the bottom. <br>(This will hopefully be more intuitive with final graphics)<br></li><li>You can place a shape on top of another shape of the next size up regardless of colour (e.g. triangle on a square, square on a pentagon).<br></li><li>If you disable the 'strict' setting, you can place a shape on top of <i>any</i> larger shape (e.g. circle on a square)<br></li><li>You can only move multiple shapes at the same time (moving one shape and everything above it) if all the shapes are of the same colour and in the correct order.<br></li><li>Not all of the pieces are on the board at the beginning. You need to choose when to 'deal' in these additional pieces, which will be added to the top of each column.<br></li><li>A column cannot go more than 12 pieces high. If a column is 12 high, it will block the next deal.<br></li><li>If you find yourself not able to make a move then you lost that game (no prompt as yet)</li></ul></span><br>That's the basics of it. It's not too hard to understand once you go through it once.<br><br>There are three levels: easy with just one colour, medium with two, and hard with four (it starts on medium).<br>If you have some time to perhaps play through a few games of each, with and without the strict setting, I'd greatly appreciate it if you could give some feedback below. Was it challenging? Was it fun to play? Or only somewhat? Completely boring? I hate these games!<br><br>There are likely to be a few bugs floating about, so if you run into any if you could mention them below too would be a great help.<br><br>Thanks for your help!<br><br>[edit]<br>updated the graphics a bit to make it a bit easier on the colour blind. ]]></content:encoded></item><item><title>Metaplace asset grabber</title><link>http://oscan.net/?cmd=blog&amp;pid=15</link><description>I've put together an asset grabber for Metaplace to make it easier for users to download scripts, images, sounds, tiles &amp;amp; maps (for each place) and initial tag stream from their various worlds. This is basically a mini client that connects to a world and parses the lists of assets that are normally sent to clients.&lt;br&gt;&lt;br&gt;A few things to be aware of:&lt;br&gt;&lt;span class=standard_text&gt;&lt;ul&gt;&lt;li&gt;The username supplied is case-sensitive and must be exactly the same as displayed on your metaplace profile. e.g. Obo not obo.&lt;br&gt;&lt;/li&gt;&lt;li&gt;You are required to provide your metaplace password. Just be aware this is not an official metaplace service! That said, your password will not be stored anywhere. Just be aware of any similar service that does as for your password.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Once you submit the form &lt;span style='color:blue'&gt;nothing will appear to happen other than the browser will appear to be connecting to oscan.net&lt;/span&gt;. This is the way it currently works, so just let it be! Once it has grabbed all the assets it will pack them into a Zip file and then give you a prompt to download it. &lt;b&gt;Don't hit the submit button twice!&lt;/b&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;This process may take a while for large worlds, so &lt;b&gt;BE PATIENT!&lt;/b&gt; If the browser looks like it is doing something then just let it work away.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Where possible use the &quot;local only&quot; option to only get 0:x assets if you don't need everything from the world.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If you get an error link &quot;could not connect to game04.metaplace.com:5101&quot; then try again later. Your login session tried to connect to a server and/or port my web host hasn't put on the white-list to allow connections.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If an asset could not be downloaded it should be listed in the error_log provided in the zip file.&lt;br&gt;&lt;/li&gt;&lt;li&gt;While it works for me it very well might break, and there is not much time left to allow more testing! If something goes wrong leave a comment here or use the contact page and I'll try and track down the problem.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt; &lt;br&gt;So here if the link...&lt;br&gt;&lt;a href='http://oscan.net/metaplace/asset_grab/' class='link'&gt;http://oscan.net/metaplace/asset_grab/&lt;/a&gt;&lt;br&gt;&lt;br&gt;I'll see about making it easier, more foolproof, to use in the next few days if needed.&lt;br&gt;&lt;br&gt;[edit]&lt;br&gt;&lt;br&gt;Fixed an issue with the content of downloaded scripts being a web-api error message like...&lt;br&gt;&lt;br&gt;[S_ERROR]|110|web_api|You have exceeded the maximum of 50 requests per minute.&lt;br&gt;&lt;br&gt;Too lazy to check if there was an actual error, so I just rate limited it to one script per second, or three seconds for every tenth script.&lt;br&gt;&lt;br&gt;I also altered the 'Local Only' option so that you could set a specific worldscope, instead of just 0:x.&lt;br&gt;&lt;br&gt;[edit 1st Jan]&lt;br&gt;For some reason access to the game servers got blocked again, so this wasn't working from around some time last night. Should be up and running again (apart from the bits that don't work :P).</description><pubDate>Mon, 28 Dec 2009 4:43:11 GMT</pubDate><content:encoded><![CDATA[ I've put together an asset grabber for Metaplace to make it easier for users to download scripts, images, sounds, tiles &amp; maps (for each place) and initial tag stream from their various worlds. This is basically a mini client that connects to a world and parses the lists of assets that are normally sent to clients.<br><br>A few things to be aware of:<br><span class=standard_text><ul><li>The username supplied is case-sensitive and must be exactly the same as displayed on your metaplace profile. e.g. Obo not obo.<br></li><li>You are required to provide your metaplace password. Just be aware this is not an official metaplace service! That said, your password will not be stored anywhere. Just be aware of any similar service that does as for your password.<br></li><li>Once you submit the form <span style='color:blue'>nothing will appear to happen other than the browser will appear to be connecting to oscan.net</span>. This is the way it currently works, so just let it be! Once it has grabbed all the assets it will pack them into a Zip file and then give you a prompt to download it. <b>Don't hit the submit button twice!</b><br></li><li>This process may take a while for large worlds, so <b>BE PATIENT!</b> If the browser looks like it is doing something then just let it work away.<br></li><li>Where possible use the "local only" option to only get 0:x assets if you don't need everything from the world.<br></li><li>If you get an error link "could not connect to game04.metaplace.com:5101" then try again later. Your login session tried to connect to a server and/or port my web host hasn't put on the white-list to allow connections.<br></li><li>If an asset could not be downloaded it should be listed in the error_log provided in the zip file.<br></li><li>While it works for me it very well might break, and there is not much time left to allow more testing! If something goes wrong leave a comment here or use the contact page and I'll try and track down the problem.<br></li></ul></span> <br>So here if the link...<br><a href='http://oscan.net/metaplace/asset_grab/' class='link'>http://oscan.net/metaplace/asset_grab/</a><br><br>I'll see about making it easier, more foolproof, to use in the next few days if needed.<br><br>[edit]<br><br>Fixed an issue with the content of downloaded scripts being a web-api error message like...<br><br>[S_ERROR]|110|web_api|You have exceeded the maximum of 50 requests per minute.<br><br>Too lazy to check if there was an actual error, so I just rate limited it to one script per second, or three seconds for every tenth script.<br><br>I also altered the 'Local Only' option so that you could set a specific worldscope, instead of just 0:x.<br><br>[edit 1st Jan]<br>For some reason access to the game servers got blocked again, so this wasn't working from around some time last night. Should be up and running again (apart from the bits that don't work :P). ]]></content:encoded></item><item><title>Moving on (or back) to Flash</title><link>http://oscan.net/?cmd=blog&amp;pid=14</link><description>With the closing of Metaplace a lot of its users are now asking themselves &quot;where to now?&quot;. Some are looking for another social hangout, others, like myself are thinking more about game development environments. There has been a lot of talk about &lt;a href='http://unity3d.com/' class='link'&gt;Unity 3D&lt;/a&gt;, which I've been meaning to have a look at for a while, but first I think I'm going to try out Flash... again (although to be pedantic it'll be Flex).&lt;br&gt;&lt;br&gt;After my 'success' of creating &lt;a href='http://www.youtube.com/watch?v=-z8O25ktp9Y' class='link'&gt;That Falling Block Game&lt;/a&gt; on Metaplace (okay, okay, I'll finally admit it... It's TETRIS!), and buoyed by the &lt;a href='http://forums.f13.net/index.php?topic=15690.0' class='link'&gt;success stories&lt;/a&gt; of &lt;a href='http://www.loadeddie.com/' class='link'&gt;others&lt;/a&gt;, I thought I could try my hand at creating a &lt;i&gt;real&lt;/i&gt; flash game rather than trying to contort a virtual world platform into one. So last summer, after finally figuring out you could create flash apps for free with the command line flex compiler (therefore avoiding the need to spend hundreds on the Flash development program) I started to make a flash game!&lt;br&gt;&lt;br&gt;&lt;b&gt;Adventures in Actionscript&lt;/b&gt;&lt;br&gt;The scripting language, ActionScript, had changed a bit since I had &lt;a href='http://oscan.net/index.php?cmd=blog&amp;amp;pid=5' class='link'&gt;last played around with it&lt;/a&gt;, so I used this &lt;a href='http://www.brighthub.com/internet/web-development/articles/11010.aspx' class='link'&gt;great tutorial for making games in flex&lt;/a&gt; to get myself up to speed (since AS is from the same family as JavaScript it wasn't too hard to get in to).&lt;br&gt;&lt;br&gt;I had decided to try and make a Peggle like hit-the-targets-with-the-bouncing-ball game, just without gravity. That was probably my first mistake; wrangling with physics while trying to learn the ins and outs of a platform is probably not the best idea. My second, and most likely biggest, mistake was to write all that physics interaction myself, rather than use a 3rd party library. It seemed a somewhat reasonable decision; there was only going to be one moving object, with everything it could collide with being stationary (walls, circles and slingshotting around black holes). I had worked on this game on and off over three months of the summer and most of that time was spent trying to get one ball to bounce correctly off those various surfaces, or ensuring that it would bounce at all and not just pass through the object.&lt;br&gt;&lt;br&gt;Ultimately it was never finished. The last version of the game was complied on the 27th of August, full of debug code...&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width='400' height='460'&gt;&lt;param name='movie' value='http://oscan.net/game1.swf'&gt;&lt;embed src='http://oscan.net/game1.swf' width='400' height='460'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;(hit r to reset if the ball gets stuck somewhere)&lt;/div&gt;&lt;br&gt;The aim of the game was:&lt;br&gt;&lt;span class=standard_text&gt;&lt;ul&gt;&lt;li&gt;Hit each of the targets in sequence. There could be up to eight, where they were coloured red, orange, yellow, etc. Each time you hit the next in the sequence it played a musical note on a scale.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The player first places the ball within a small starting area and then aims where to shoot the ball (fine-aim with mouse-wheel or x/c). From then on the player has no control as the ball bounces around the level, hitting targets and traps.&lt;br&gt;&lt;/li&gt;&lt;li&gt;You started out with 3 hit-points. Each time you hit the next in the sequence you got an extra hit-point. Each time you hit some spikes you lost a hit point.&lt;br&gt;&lt;/li&gt;&lt;li&gt;When you got to 0 hp the level reset.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Getting too close to a black-hole and falling in would reset the level.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If you have more than 3 hp you could spend 3 hp to stop the ball in its tracks so that you could re-aim without resetting the level (single-click while ball is moving).&lt;br&gt;&lt;/li&gt;&lt;li&gt;When aiming you could increase or decrease the length of the aiming guide line (up or down keys), which would have modified the amount of points you could get (the longer the line the fewer points you would would get during the level)&lt;br&gt;&lt;/li&gt;&lt;li&gt;For each level there would be at least one way to aim the ball in such a way that you could hit each target without losing any hit-points (a perfect completion)&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;br&gt;Those last two were what probably lead to me dropping the project (or at least turning a break into an indefinite break). Although there were still some annoying collision bugs to iron out, most had been taken care of and I was beginning to move on to actually creating levels. I hadn't made a level editor, instead defining the levels in text files as a list of objects and their positions and orientations. This is what originally lead to the extendible aim guide in order to try and find at least one perfect route per level. It was a rather clumsy way to go about building a level; I'd enter an object into the text file, recompile the flash movie, play the level to see how it interacts with the path of the ball, make adjustments in the text file etc. etc., all the while the aim guide was buggy in its own collision detection.&lt;br&gt;&lt;br&gt;Luckily before I got too far in this mind numbing process I noticed something odd about how the ball would bounce off the circular targets. A small difference in the approach trajectory of the ball to a circular target made a larger difference in the departing trajectory. When trying to aim the ball so it would hit multiple circular targets in succession, a tiny initial fine-tuning in aim resulted in a massive difference in the path after a few bounces. Whether this is just a property of collisions between circles or as a result of my code, it would have taken the only form of skill and control away from the player, leaving them with just a shoot and hope strategy, as well as making an already painful level creation process near impossible.&lt;br&gt;&lt;br&gt;I decided to put it all aside for a while, but then never revisited it to find the actual cause.&lt;br&gt;&lt;br&gt;&lt;b&gt;Back to square one&lt;/b&gt;&lt;br&gt;With my impending post-Metaplace attempt at entering the flash game scene, I hope I'll have learnt the lessons of my previous effort and start out with something a bit less chaotic. A bit more mundane. Like a colour-matching game!&lt;br&gt;It was in the middle of my 3,487th game of spider solitaire (on medium I must admit) that I thought &lt;i&gt;'I could turn this into a simple match-5 game, with coloured shapes in place of suited cards!'&lt;/i&gt; &lt;br&gt;&lt;br&gt;So come January 2nd that shall be my task, and I give myself... oh, lets say two weeks to get it done!&lt;br&gt;</description><pubDate>Sun, 27 Dec 2009 4:34:26 GMT</pubDate><content:encoded><![CDATA[ With the closing of Metaplace a lot of its users are now asking themselves "where to now?". Some are looking for another social hangout, others, like myself are thinking more about game development environments. There has been a lot of talk about <a href='http://unity3d.com/' class='link'>Unity 3D</a>, which I've been meaning to have a look at for a while, but first I think I'm going to try out Flash... again (although to be pedantic it'll be Flex).<br><br>After my 'success' of creating <a href='http://www.youtube.com/watch?v=-z8O25ktp9Y' class='link'>That Falling Block Game</a> on Metaplace (okay, okay, I'll finally admit it... It's TETRIS!), and buoyed by the <a href='http://forums.f13.net/index.php?topic=15690.0' class='link'>success stories</a> of <a href='http://www.loadeddie.com/' class='link'>others</a>, I thought I could try my hand at creating a <i>real</i> flash game rather than trying to contort a virtual world platform into one. So last summer, after finally figuring out you could create flash apps for free with the command line flex compiler (therefore avoiding the need to spend hundreds on the Flash development program) I started to make a flash game!<br><br><b>Adventures in Actionscript</b><br>The scripting language, ActionScript, had changed a bit since I had <a href='http://oscan.net/index.php?cmd=blog&amp;pid=5' class='link'>last played around with it</a>, so I used this <a href='http://www.brighthub.com/internet/web-development/articles/11010.aspx' class='link'>great tutorial for making games in flex</a> to get myself up to speed (since AS is from the same family as JavaScript it wasn't too hard to get in to).<br><br>I had decided to try and make a Peggle like hit-the-targets-with-the-bouncing-ball game, just without gravity. That was probably my first mistake; wrangling with physics while trying to learn the ins and outs of a platform is probably not the best idea. My second, and most likely biggest, mistake was to write all that physics interaction myself, rather than use a 3rd party library. It seemed a somewhat reasonable decision; there was only going to be one moving object, with everything it could collide with being stationary (walls, circles and slingshotting around black holes). I had worked on this game on and off over three months of the summer and most of that time was spent trying to get one ball to bounce correctly off those various surfaces, or ensuring that it would bounce at all and not just pass through the object.<br><br>Ultimately it was never finished. The last version of the game was complied on the 27th of August, full of debug code...<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width='400' height='460'><param name='movie' value='http://oscan.net/game1.swf'><embed src='http://oscan.net/game1.swf' width='400' height='460'></embed></object><br>(hit r to reset if the ball gets stuck somewhere)</div><br>The aim of the game was:<br><span class=standard_text><ul><li>Hit each of the targets in sequence. There could be up to eight, where they were coloured red, orange, yellow, etc. Each time you hit the next in the sequence it played a musical note on a scale.<br></li><li>The player first places the ball within a small starting area and then aims where to shoot the ball (fine-aim with mouse-wheel or x/c). From then on the player has no control as the ball bounces around the level, hitting targets and traps.<br></li><li>You started out with 3 hit-points. Each time you hit the next in the sequence you got an extra hit-point. Each time you hit some spikes you lost a hit point.<br></li><li>When you got to 0 hp the level reset.<br></li><li>Getting too close to a black-hole and falling in would reset the level.<br></li><li>If you have more than 3 hp you could spend 3 hp to stop the ball in its tracks so that you could re-aim without resetting the level (single-click while ball is moving).<br></li><li>When aiming you could increase or decrease the length of the aiming guide line (up or down keys), which would have modified the amount of points you could get (the longer the line the fewer points you would would get during the level)<br></li><li>For each level there would be at least one way to aim the ball in such a way that you could hit each target without losing any hit-points (a perfect completion)</li></ul></span><br>Those last two were what probably lead to me dropping the project (or at least turning a break into an indefinite break). Although there were still some annoying collision bugs to iron out, most had been taken care of and I was beginning to move on to actually creating levels. I hadn't made a level editor, instead defining the levels in text files as a list of objects and their positions and orientations. This is what originally lead to the extendible aim guide in order to try and find at least one perfect route per level. It was a rather clumsy way to go about building a level; I'd enter an object into the text file, recompile the flash movie, play the level to see how it interacts with the path of the ball, make adjustments in the text file etc. etc., all the while the aim guide was buggy in its own collision detection.<br><br>Luckily before I got too far in this mind numbing process I noticed something odd about how the ball would bounce off the circular targets. A small difference in the approach trajectory of the ball to a circular target made a larger difference in the departing trajectory. When trying to aim the ball so it would hit multiple circular targets in succession, a tiny initial fine-tuning in aim resulted in a massive difference in the path after a few bounces. Whether this is just a property of collisions between circles or as a result of my code, it would have taken the only form of skill and control away from the player, leaving them with just a shoot and hope strategy, as well as making an already painful level creation process near impossible.<br><br>I decided to put it all aside for a while, but then never revisited it to find the actual cause.<br><br><b>Back to square one</b><br>With my impending post-Metaplace attempt at entering the flash game scene, I hope I'll have learnt the lessons of my previous effort and start out with something a bit less chaotic. A bit more mundane. Like a colour-matching game!<br>It was in the middle of my 3,487th game of spider solitaire (on medium I must admit) that I thought <i>'I could turn this into a simple match-5 game, with coloured shapes in place of suited cards!'</i> <br><br>So come January 2nd that shall be my task, and I give myself... oh, lets say two weeks to get it done!<br> ]]></content:encoded></item><item><title>Metaplace is dead. Long live Metaplace!</title><link>http://oscan.net/?cmd=blog&amp;pid=13</link><description>So we got the news yesterday that Metaplace.com will be &lt;a href='http://us1.campaign-archive.com/?u=d52efca73013b738db5d9bab8&amp;amp;id=3299db4e27&amp;amp;e=07b4a740c2' class='link'&gt;closing down&lt;/a&gt; as a User Generated Content platform at the end of the year, a little over two years since alpha testing first began. My sentiments pretty much echo &lt;a href='http://camelpate.blogspot.com/2009/12/rip-metaplacecom.html' class='link'&gt;those of Crwth&lt;/a&gt;. Metaplace had the right ingredients, but perhaps just needed a pinch of something or other and a little bit longer to cook before serving.&lt;br&gt;&lt;br&gt;I first got my hands on Metaplace, after following it from its announcement, only a few months after alpha testing started; and other than a handful of days where I hadn't been online, I've been there every day since. Even during the weeks when I didn't even touch the building tools I was always sitting in Plain Old Chat keeping up to date with the goings on of the community.&lt;br&gt;&lt;br&gt;To me Metaplace was a way to help me understand the making of games, providing an engine for rapid prototyping and a great way to get rapid feedback from the community. I tried a number of projects with varying levels of success, the best of which ended up as featured content in Metaplace Central. &lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-z8O25ktp9Y&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-z8O25ktp9Y&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/yhZ9j5t8emw&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/yhZ9j5t8emw&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;Initially I thought the appeal of Metaplace was that it was going to allow people to make their own little mini MMOs (mMO?), but for a large part the visible community ended up being a bunch of 12 year olds pretending to be 14 year olds looking for 'boyfriends' and 'girlfriends', whatever that means in a virtual context. The more dedicated builders began to retreat into various unseen corners while still creating some great content in the form of Adventure games or Platform games or other interesting experiments.&lt;br&gt;&lt;br&gt;Over time I had been making little MMO systems, such as health bars and skill toolbars, for people to use to try and make games; although I could probably have made them a bit easier to use! I only just recently started to pull these together myself in an attempt to create a group based dungeon crawl. It had been a while since I had made anything in Metaplace and working on this, coding AI, making walls disappear when you walk into a room etc. was getting me excited about the whole thing all over again.&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;object width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/_YsDjWlfy_Y&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/_YsDjWlfy_Y&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;640&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;I was also just starting to help work on Crwth's &lt;a href='http://pages.cpsc.ucalgary.ca/~crwth/js/chump/' class='link'&gt;HTML5 client&lt;/a&gt;, which I was finding really interesting.&lt;br&gt;But alas, it is not to be.&lt;br&gt;&lt;br&gt;I'll be interested to see what now becomes of the Metaplace platform. I'm thinking we will be seeing professionally created games come out of it, rather than the &quot;virtual worlds for everyone&quot; approach.&lt;br&gt;&lt;br&gt;All the time I spent on Metaplace was time well spent. I learned a lot, got to know some great people, which will all undoubtedly have an effect on whatever future projects I end up working on.&lt;br&gt;</description><pubDate>Tue, 22 Dec 2009 6:29:24 GMT</pubDate><content:encoded><![CDATA[ So we got the news yesterday that Metaplace.com will be <a href='http://us1.campaign-archive.com/?u=d52efca73013b738db5d9bab8&amp;id=3299db4e27&amp;e=07b4a740c2' class='link'>closing down</a> as a User Generated Content platform at the end of the year, a little over two years since alpha testing first began. My sentiments pretty much echo <a href='http://camelpate.blogspot.com/2009/12/rip-metaplacecom.html' class='link'>those of Crwth</a>. Metaplace had the right ingredients, but perhaps just needed a pinch of something or other and a little bit longer to cook before serving.<br><br>I first got my hands on Metaplace, after following it from its announcement, only a few months after alpha testing started; and other than a handful of days where I hadn't been online, I've been there every day since. Even during the weeks when I didn't even touch the building tools I was always sitting in Plain Old Chat keeping up to date with the goings on of the community.<br><br>To me Metaplace was a way to help me understand the making of games, providing an engine for rapid prototyping and a great way to get rapid feedback from the community. I tried a number of projects with varying levels of success, the best of which ended up as featured content in Metaplace Central. <br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/-z8O25ktp9Y&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-z8O25ktp9Y&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></div><br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/yhZ9j5t8emw&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yhZ9j5t8emw&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></div><br><br>Initially I thought the appeal of Metaplace was that it was going to allow people to make their own little mini MMOs (mMO?), but for a large part the visible community ended up being a bunch of 12 year olds pretending to be 14 year olds looking for 'boyfriends' and 'girlfriends', whatever that means in a virtual context. The more dedicated builders began to retreat into various unseen corners while still creating some great content in the form of Adventure games or Platform games or other interesting experiments.<br><br>Over time I had been making little MMO systems, such as health bars and skill toolbars, for people to use to try and make games; although I could probably have made them a bit easier to use! I only just recently started to pull these together myself in an attempt to create a group based dungeon crawl. It had been a while since I had made anything in Metaplace and working on this, coding AI, making walls disappear when you walk into a room etc. was getting me excited about the whole thing all over again.<br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/_YsDjWlfy_Y&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_YsDjWlfy_Y&hl=en&fs=1&color1=0x3a3a3a&color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></div><br><br>I was also just starting to help work on Crwth's <a href='http://pages.cpsc.ucalgary.ca/~crwth/js/chump/' class='link'>HTML5 client</a>, which I was finding really interesting.<br>But alas, it is not to be.<br><br>I'll be interested to see what now becomes of the Metaplace platform. I'm thinking we will be seeing professionally created games come out of it, rather than the "virtual worlds for everyone" approach.<br><br>All the time I spent on Metaplace was time well spent. I learned a lot, got to know some great people, which will all undoubtedly have an effect on whatever future projects I end up working on.<br> ]]></content:encoded></item><item><title>DIY Wedge: more control!</title><link>http://oscan.net/?cmd=blog&amp;pid=12</link><description>Last week I finally got around to adding an azimuth fine tuning controller to my diy equatorial wedge, which is little more than a bunch of M6 fittings fixed to both the wedge body and one of the bolts that attaches wedge to the tripod. I only just got around to it as I the original bolts I got for the tripod were not long enough (there were in fact flush to the tripod body), so I had to go to a specialist trade shop again to get the mtyhical UNC thread bolts and nuts.&lt;br&gt;&lt;br&gt;When the tripod bolts are loosened I can then use the wing nuts on the side mounted azimuth control to make slight adjustments to the azimuth angle when attempting zero in on Polaris while doing a 'wedge align' as a part of the equatorial alignment setup; there is enough give on the size of the bolt holes on the wedge to allow some rotational movement. &lt;br&gt;Hopefully this works out better than the disastrous results that come with picking up the entire gear and trying to shift it slightly one way or the other!&lt;br&gt;&lt;br&gt;Now I just need some clear skies... on a night that is not too cold please!&lt;br&gt;&lt;br&gt;&lt;div class=standard_text style=&quot;display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;&quot;&gt;&lt;img src='./images/thumb_14.png' alt='' title='' width='185' border=0 /&gt; &lt;img src='./images/thumb_15.png' alt='' title='' width='240' border=0 /&gt;&lt;/div&gt;&lt;br&gt;&lt;table align=center border=0 width=400 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td height=110 width=400&gt;&lt;div height=110 width=400 style='position:relative;'&gt;&lt;div id='picbar_container_a890e905f2f1b34969f59bc09d0a315f' style='display:table-cell;vertical-align:middle;position:absolute;top:-50;height:110px;width:400;max-height:110px;max-width:400;clip:rect(0,400,110,0);'&gt;&lt;div id='picbar_a890e905f2f1b34969f59bc09d0a315f' style='position:absolute;left:0;line-height:100px; text-align: center;height:100;width:100%;white-space:nowrap;'&gt;&lt;img scr='./img/blank.gif' width=1 height=101 style='vertical-align:middle;'&gt;&lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=3'&gt;&lt;img src='./images/thumb_3.png' style='vertical-align:middle;height:50' class=solid id='picbar_1_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 1, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',1, 6)&quot; alt=&quot;DIY Wedge 1&quot; title=&quot;DIY Wedge 1&quot;&gt;&lt;/a&gt; &lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=4'&gt;&lt;img src='./images/thumb_4.png' style='vertical-align:middle;height:50' class=solid id='picbar_2_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 2, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',2, 6)&quot; alt=&quot;DIY Wedge 2&quot; title=&quot;DIY Wedge 2&quot;&gt;&lt;/a&gt; &lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=8'&gt;&lt;img src='./images/thumb_8.png' style='vertical-align:middle;height:50' class=solid id='picbar_3_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 3, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',3, 6)&quot; alt=&quot;DIY wedge 3&quot; title=&quot;DIY wedge 3&quot;&gt;&lt;/a&gt; &lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=6'&gt;&lt;img src='./images/thumb_6.png' style='vertical-align:middle;height:50' class=solid id='picbar_4_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 4, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',4, 6)&quot; alt=&quot;DIY Wedge 4&quot; title=&quot;DIY Wedge 4&quot;&gt;&lt;/a&gt; &lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=14'&gt;&lt;img src='./images/thumb_14.png' style='vertical-align:middle;height:50' class=solid id='picbar_5_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 5, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',5, 6)&quot; alt=&quot;DIY Wedge Azimuth Control&quot; title=&quot;DIY Wedge Azimuth Control&quot;&gt;&lt;/a&gt; &lt;a href='./index.php?cmd=gallery&amp;cat=8,&amp;pid=15'&gt;&lt;img src='./images/thumb_15.png' style='vertical-align:middle;height:50' class=solid id='picbar_6_a890e905f2f1b34969f59bc09d0a315f' onmouseover=&quot;picbar_over('a890e905f2f1b34969f59bc09d0a315f', 6, 6)&quot; onmouseout=&quot;picbar_out('a890e905f2f1b34969f59bc09d0a315f',6, 6)&quot; alt=&quot;DIY Wedge Azimuth Control&quot; title=&quot;DIY Wedge Azimuth Control&quot;&gt;&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div id='picbar_scroll_left_a890e905f2f1b34969f59bc09d0a315f' style='width:17;height:100;position:absolute;left:-16px;top:-50px;background-color:grey;opacity:0.5;filter:alpha(opacity=50);' onmouseover=&quot;scrollPicBar('a890e905f2f1b34969f59bc09d0a315f','left',6)&quot; onmouseout=&quot;stopScrollPicBar('a890e905f2f1b34969f59bc09d0a315f')&quot;&gt;&lt;img src='./img/move_W1.gif' width=17 height=17 style='position:absolute;top:42'&gt;&lt;/div&gt;&lt;div id='picbar_scroll_right_a890e905f2f1b34969f59bc09d0a315f' style='width:17;height:100;position:absolute;right:-16px;top:-50px;background-color:grey;opacity:0.5;filter:alpha(opacity=50);' onmouseover=&quot;scrollPicBar('a890e905f2f1b34969f59bc09d0a315f','right',6)&quot; onmouseout=&quot;stopScrollPicBar('a890e905f2f1b34969f59bc09d0a315f')&quot;&gt;&lt;img src='./img/move_E1.gif' width=17 height=17 style='position:absolute;top:42'&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type='text/javascript'&gt;picbar_over('a890e905f2f1b34969f59bc09d0a315f',1,6,25);&lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</description><pubDate>Tue, 20 Oct 2009 2:02:33 GMT</pubDate><content:encoded><![CDATA[ Last week I finally got around to adding an azimuth fine tuning controller to my diy equatorial wedge, which is little more than a bunch of M6 fittings fixed to both the wedge body and one of the bolts that attaches wedge to the tripod. I only just got around to it as I the original bolts I got for the tripod were not long enough (there were in fact flush to the tripod body), so I had to go to a specialist trade shop again to get the mtyhical UNC thread bolts and nuts.<br><br>When the tripod bolts are loosened I can then use the wing nuts on the side mounted azimuth control to make slight adjustments to the azimuth angle when attempting zero in on Polaris while doing a 'wedge align' as a part of the equatorial alignment setup; there is enough give on the size of the bolt holes on the wedge to allow some rotational movement. <br>Hopefully this works out better than the disastrous results that come with picking up the entire gear and trying to shift it slightly one way or the other!<br><br>Now I just need some clear skies... on a night that is not too cold please!<br><br><div class=standard_text style="display: block;margin-left: auto;margin-right: auto;overflow:hidden;text-align:center;"><img src='./images/thumb_14.png' alt='' title='' width='185' border=0 /> <img src='./images/thumb_15.png' alt='' title='' width='240' border=0 /></div><br><table align=center border=0 width=400 cellpadding=0 cellspacing=0><tr><td height=110 width=400><div height=110 width=400 style='position:relative;'><div id='picbar_container_a890e905f2f1b34969f59bc09d0a315f' style='display:table-cell;vertical-align:middle;position:absolute;top:-50;height:110px;width:400;max-height:110px;max-width:400;clip:rect(0,400,110,0);'><div id='picbar_a890e905f2f1b34969f59bc09d0a315f' style='position:absolute;left:0;line-height:100px; text-align: center;height:100;width:100%;white-space:nowrap;'><img scr='./img/blank.gif' width=1 height=101 style='vertical-align:middle;'><a href='./index.php?cmd=gallery&cat=8,&pid=3'><img src='./images/thumb_3.png' style='vertical-align:middle;height:50' class=solid id='picbar_1_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 1, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',1, 6)" alt="DIY Wedge 1" title="DIY Wedge 1"></a> <a href='./index.php?cmd=gallery&cat=8,&pid=4'><img src='./images/thumb_4.png' style='vertical-align:middle;height:50' class=solid id='picbar_2_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 2, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',2, 6)" alt="DIY Wedge 2" title="DIY Wedge 2"></a> <a href='./index.php?cmd=gallery&cat=8,&pid=8'><img src='./images/thumb_8.png' style='vertical-align:middle;height:50' class=solid id='picbar_3_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 3, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',3, 6)" alt="DIY wedge 3" title="DIY wedge 3"></a> <a href='./index.php?cmd=gallery&cat=8,&pid=6'><img src='./images/thumb_6.png' style='vertical-align:middle;height:50' class=solid id='picbar_4_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 4, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',4, 6)" alt="DIY Wedge 4" title="DIY Wedge 4"></a> <a href='./index.php?cmd=gallery&cat=8,&pid=14'><img src='./images/thumb_14.png' style='vertical-align:middle;height:50' class=solid id='picbar_5_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 5, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',5, 6)" alt="DIY Wedge Azimuth Control" title="DIY Wedge Azimuth Control"></a> <a href='./index.php?cmd=gallery&cat=8,&pid=15'><img src='./images/thumb_15.png' style='vertical-align:middle;height:50' class=solid id='picbar_6_a890e905f2f1b34969f59bc09d0a315f' onmouseover="picbar_over('a890e905f2f1b34969f59bc09d0a315f', 6, 6)" onmouseout="picbar_out('a890e905f2f1b34969f59bc09d0a315f',6, 6)" alt="DIY Wedge Azimuth Control" title="DIY Wedge Azimuth Control"></a> </div></div><div id='picbar_scroll_left_a890e905f2f1b34969f59bc09d0a315f' style='width:17;height:100;position:absolute;left:-16px;top:-50px;background-color:grey;opacity:0.5;filter:alpha(opacity=50);' onmouseover="scrollPicBar('a890e905f2f1b34969f59bc09d0a315f','left',6)" onmouseout="stopScrollPicBar('a890e905f2f1b34969f59bc09d0a315f')"><img src='./img/move_W1.gif' width=17 height=17 style='position:absolute;top:42'></div><div id='picbar_scroll_right_a890e905f2f1b34969f59bc09d0a315f' style='width:17;height:100;position:absolute;right:-16px;top:-50px;background-color:grey;opacity:0.5;filter:alpha(opacity=50);' onmouseover="scrollPicBar('a890e905f2f1b34969f59bc09d0a315f','right',6)" onmouseout="stopScrollPicBar('a890e905f2f1b34969f59bc09d0a315f')"><img src='./img/move_E1.gif' width=17 height=17 style='position:absolute;top:42'></div></div><script type='text/javascript'>picbar_over('a890e905f2f1b34969f59bc09d0a315f',1,6,25);</script></td></tr></table> ]]></content:encoded></item><item><title>Anatomy of a very Metaplace hack</title><link>http://oscan.net/?cmd=blog&amp;pid=10</link><description>There are those in the Metaplace community - those who inhabit the dank, dark avatar-less backwaters - who strive to know as much as possible about inner workings of the system. Those who make clients, who probe for weaknesses in closed-source scripts, who still mourn the loss of &lt;a href='http://camelpate.blogspot.com/2009/06/outputtouser.html' class='link'&gt;OutputToUser()&lt;/a&gt;, and get very grumpy at undocumented changes.&lt;br&gt;&lt;br&gt;When server update notes are released they don't just look at new features thinking '&lt;i&gt;how could I use this in a game&lt;/i&gt;?' but also '&lt;i&gt;how could this be abused&lt;/i&gt;?'&lt;br&gt;&lt;br&gt;One such update that started a spate of devious thinking was the inclusion of the UiPickable() function and its pending support in the client. This function would allow a UI element (and any child elements) to ignore mouse-clicks, making them fall through to whatever was underneath. Now this has some obviously helpful uses such as with avatar name tags; these are pieces of UI attached to objects in worldspace that can sometimes get in the way of mouse-clicks intended for movement. But it could also be easily abused, and it didn't take long for Crwth to think of a way to use it, with the intended target being the user-to-user coin gifting.&lt;br&gt;&lt;br&gt;Coin gifting (which has only recently been removed again in preparation for testing &quot;Real Money&quot; systems) was an in-world functionality that allowed one player to give some of their fake Metaplace play-dough money to another player. This was all safely locked away in the Secure Features module, which relies on closed-source scripts for its security. Closed-source scripts, &lt;i&gt;if used correctly&lt;/i&gt;, can be very good at keeping your code and data locked up tight. Although this hadn't always been the case - there were times when they were not so closed and exposed their data to anyone! - by the time coin gifting came around they were pretty secure. &lt;br&gt;&lt;br&gt;If you wanted to exploit coin gifting, for example trying to get someone to give you more than they wanted to, then you couldn't do it by trying to change the data within the secured gifting 'session'. But coin gifting did have a weakness; it required user input. The user needed to enter the amount of coins they wished to transfer and then again approve that transfer on a confirmation balance window. The user has to trust that the User Interface displayed to them is accurate and that they will only be transferring the amount they expect to.&lt;br&gt;&lt;br&gt;Crwth's idea was to exploit this trust by placing his own UI on top of the 'real' UI. The fake UI would use UiPickable() to allow the button clicks to pass down to the real UI, which was using different values than what the user expected. But it wouldn't even have to be similar UI; a user could think they were playing a game in someone's world, but really they were transferring their coins to the world owner.&lt;br&gt;&lt;br&gt;At the time this was discussed there was still no support for UiPickable in the client, so it couldn't be tested, but that didn't stop me from trying to implement something similar.&lt;br&gt;This vector of attack relied on the user actually wanting to perform a coin transfer and conning the user into transferring an unwanted amount by making subtle tweaks to the actual coin transfer UI itself.&lt;br&gt;&lt;br&gt;&lt;b&gt;On to the gory details:&lt;/b&gt;&lt;br&gt;A coin transfer was initiated from the context menu on a user; you would click the user you wanted to give coins to and select the option from the menu that popped up. This started a session from the &lt;i&gt;mpsec_start_coin_gift&lt;/i&gt; trigger. Since it used a trigger you could write a script that also had a version of this trigger, attached to the player template, so you could know when a transfer session had started and which user was the target. This on its own doesn't do you much good; while you could block the actual session from starting by preventing other implementations of that trigger from firing, you couldn't really put your own fake transfer in its place, as only the 'Secure Features' script has the privileges to perform an actual transfer. But it did allow your script to know when to try begin exploiting.&lt;br&gt;&lt;br&gt;Since my script (or any likely attacking script) was attached after the 'Secure Features' script, my version of the trigger fired first. By this point there was no session and no UI to try and meddle with. So I used a SendTo() to fire my own custom trigger but with a delay of 10ms (it would actually be about 30ms on average in practice due to the time it takes to set up a new execution frame). By the time this trigger actually fires the coin transfer UI will have been built, but in order to do anything to this UI you need to know what its ID numbers are.&lt;br&gt;&lt;br&gt;Each UI creation function returns a User Interface ID which can be used to manipulate that UI element after creation, such as attaching, deleting or changing values. In order to use these values you have to manually store them as they are not publicly accessible from anywhere else. So how can you get your hands on the IDs for already created UI that you did not make?&lt;br&gt;&lt;br&gt;The IDs are created sequentially; if an element you just made has an ID of 15 you can be reasonably sure that the element created immediately before it has an ID 14. In our case we are trying to look for the UI almost immediately after it was created, before it has even had a chance to be sent to the client. If you waited too long there could be a chance that some other innocent UI was created in the interval and therefore spoil your attack.&lt;br&gt;&lt;br&gt;I manually examined the MetaMarkup tags that are sent from the server to the clients and counted how many UI elements had been created for the coin transfer. Then in the first line of my custom trigger I immediately create a new UiElement and get its ID. I then subtracted the expected number elements for the coin transfer UI to get to its parent element. Alternatively you could just count back far enough to the individual child element you want to alter, such as the text field and the button, but going back to the parent demonstrates two weaknesses for the price of one.&lt;br&gt;&lt;br&gt;I could now use the newly acquired parent ID and use it with the UiFindWindow() function, which takes a parent id and a target element name. So I used that to find the text field&lt;br&gt;&lt;blockquote&gt;Code: MetaScript&lt;hr&gt;&lt;span class=standard_text style=&quot;font-family:'courier new',courier,monospace&quot;&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;uiId&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiElement(0,'my_win&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;w_finder',&amp;nbsp;0,0)&lt;br&gt;uiId&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;uiId&amp;nbsp;-&amp;nbsp;9&lt;br&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;text_field&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiFindWin&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;w(uiId,'amount_input')&lt;br&gt;&lt;/span&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;br&gt;This is the valid text field where the user enters the amount to be transferred. But instead of allowing the user to input their value here I made it invisible and changed the value to my own&lt;br&gt;&lt;blockquote&gt;Code: MetaScript&lt;hr&gt;&lt;span class=standard_text style=&quot;font-family:'courier new',courier,monospace&quot;&gt;UiVisible(text_field,0)&lt;br&gt;UiText(text_field,&amp;nbsp;'1337')&lt;br&gt;&lt;/span&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;br&gt;This will set up the session to transfer 1337 coins no matter what value the user inputs. But as of now the user has nowhere to enter a value, so I have to create a new text field that looks just like the old one.&lt;br&gt;&lt;blockquote&gt;Code: MetaScript&lt;hr&gt;&lt;span class=standard_text style=&quot;font-family:'courier new',courier,monospace&quot;&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;submit&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiFindWin&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;w(ui,'yes_button')&lt;br&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;text_field_bg&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiFindWin&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;w(ui,'amount_bg')&lt;br&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;new_field&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiTextField(text_field_bg,'hack_field',10,7,145,15,&amp;nbsp;255,255,255,&amp;nbsp;0,0,0,0,&amp;nbsp;'mpsec_coin_g&lt;span style='color:#0000ff'&gt;if&lt;/span&gt;t&amp;nbsp;'..user_id..'&amp;nbsp;1337',&amp;nbsp;100&amp;nbsp;)&lt;br&gt;UiButtonField(submit,&amp;nbsp;new_field)&lt;br&gt;&lt;/span&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;br&gt;This finds the background element that was created for the real text field and submit button. The new field is then attached to the background in the correct place and its command has my hacked value appended to it, this is just in case the user tries to submit by hitting the enter key in the field rather than clicking on the submit button.&lt;br&gt;The new field is also attached to the button (I can't quite remember why I did this, and I can't test it any more to find out. I may have been trying to see what value the user entered to use it later on).&lt;br&gt;&lt;br&gt;When the &lt;i&gt;mpsec_coin_gift&lt;/i&gt; command was sent, it now used the 1337 value for the transfer, but before doing so it generated a confirmation screen that showed the users current coin balance, the amount to be transferred and then the resultant coin balance. This was a bit tricky, as at this point the displayed transfer value was 1337, which the user would surely notice as not being the value they entered. I would need to again grab that new UI and change it, but to what? At the time (as I recall) intercepting the command with the user entered value proved a failure so you'd just have to wing it, changing the value back to the default 100 and hope the user saw what they wanted to see.&lt;br&gt;&lt;br&gt;Or this is where a bit of social engineering could come in. You could only ask a user to transfer you the value that would ultimately be displayed on the confirmation screen. So you say &quot;send me 500 coins&quot;, they input 500, 500 is then displayed on the confirm window, but they are actually sending you 5,000.&lt;br&gt;&lt;br&gt;Or there is the &lt;i&gt;real&lt;/i&gt; engineering way. Don't hardcode in a value but set up up a new command that only you use and then use that to prime the value to the used. You agree a value to be transferred, then before they get to sent it you quickly fire off a command with that value so that it is used in the display.&lt;br&gt;&lt;br&gt;The only wrinkle in these methods is that they both fail to alter the last bit of information, the resultant balance. While you can alter a value in a UI element you can not extract a current value, and a users coin balance is considered privileged information so you can't access it. You just have to hope that no one in their right mind is &lt;i&gt;actually&lt;/i&gt; going to add up the values to see if the balances match.&lt;br&gt;&lt;br&gt;I tried this attack once and only once... on the Metaplace developer who made the coin transfer code. I got him to try and send me 100 coins from within my world, but the value that popped over his head as the transfer finally went through was 1337!&lt;br&gt;&lt;br&gt;Some may think that detailing all of this now in public is just going to help the exploiters, giving them a way to con the innocent Metaplace user. But I take the view that you can not know how to create a robust secure application unless you know the potential ways in which it can be exploited. After this was demonstrated, the coin transferring code was altered to help prevent this kind of attack. But it shouldn't be just the Metaplace developers who know how it could happen, everyone on Metaplace is a potential content developer. All builders and scripts should know those kinds of exploits (which is clearly why I am writing it on a site nobody reads!).&lt;br&gt;&lt;br&gt;My as yet unreleased PayPal module faced the same problem and I used a similar method to combat it. This attack relies on someone else knowing how many UI element IDs to count back to in order to find the correct elements to alter, and also optionally the names of the elements used. This can be combated by casting doubts on those assumptions.&lt;br&gt;&lt;blockquote&gt;Code: MetaScript&lt;hr&gt;&lt;span class=standard_text style=&quot;font-family:'courier new',courier,monospace&quot;&gt;&lt;br&gt;--utility&amp;nbsp;&lt;span style='color:#0000ff'&gt;function&lt;/span&gt;s&lt;br&gt;&lt;span style='color:#0000ff'&gt;function&lt;/span&gt;&amp;nbsp;r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_ele()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;r&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;math.ceil(&amp;nbsp;((math.ran&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;m()*100)/10)&amp;nbsp;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='color:#0000ff'&gt;for&lt;/span&gt;&amp;nbsp;1,r&amp;nbsp;&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UiElement(0,'fake&amp;nbsp;ui',0,0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='color:#0000ff'&gt;end&lt;/span&gt;&lt;br&gt;&lt;span style='color:#0000ff'&gt;end&lt;/span&gt;&lt;br&gt;&lt;span style='color:#0000ff'&gt;function&lt;/span&gt;&amp;nbsp;r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_name()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;MD5(&lt;span style='color:#ff0000'&gt;os&lt;/span&gt;.time()..':'..math.ran&lt;span style='color:#0000ff'&gt;do&lt;/span&gt;m())&lt;br&gt;&lt;span style='color:#0000ff'&gt;end&lt;/span&gt;&lt;br&gt;&lt;br&gt;--build&amp;nbsp;our&amp;nbsp;UI&lt;br&gt;r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_ele()&lt;br&gt;&lt;span style='color:#0000ff'&gt;local&lt;/span&gt;&amp;nbsp;uiId&amp;nbsp;&lt;span style='color:#ff0000'&gt;=&lt;/span&gt;&amp;nbsp;UiElement(0,'myParentUI'..r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_name(),0,0)&lt;br&gt;r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_ele()&lt;br&gt;UiLabel(uiId,'myTextLabel'..r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_name(),0,0,'can&amp;nbsp;you&amp;nbsp;find&amp;nbsp;me?!')&lt;br&gt;r&lt;span style='color:#0000ff'&gt;and&lt;/span&gt;_ui_ele()&lt;br&gt;UiAttachUser(&lt;span style='color:#ff0000'&gt;self&lt;/span&gt;,uiId)&lt;br&gt;&lt;/span&gt;&lt;hr&gt;&lt;/blockquote&gt;&lt;br&gt;This code creates a random number of UI element IDs before, in between and after each newly created piece of UI, which prevents someone from simply counting back a known number of elements. It also appends random strings to the ends of UI element names so that they can not be accessed that way.&lt;br&gt;This likely won't prevent all future attacks on UI, but it is a good place to start.&lt;br&gt;&lt;br&gt;As for UiPickable()... well, we never did get support for that in the client (perhaps due to this demonstration?), which is a shame since there are cases where it could be useful, even safe. For example I see no reason why it shouldn't be allowed for UI elements that are attached to objects, in worldspace. Those will always be behind the screen level UI and so have no chance to interfere. It is also probably where it is more useful.</description><pubDate>Tue, 29 Sep 2009 6:10:06 GMT</pubDate><content:encoded><![CDATA[ There are those in the Metaplace community - those who inhabit the dank, dark avatar-less backwaters - who strive to know as much as possible about inner workings of the system. Those who make clients, who probe for weaknesses in closed-source scripts, who still mourn the loss of <a href='http://camelpate.blogspot.com/2009/06/outputtouser.html' class='link'>OutputToUser()</a>, and get very grumpy at undocumented changes.<br><br>When server update notes are released they don't just look at new features thinking '<i>how could I use this in a game</i>?' but also '<i>how could this be abused</i>?'<br><br>One such update that started a spate of devious thinking was the inclusion of the UiPickable() function and its pending support in the client. This function would allow a UI element (and any child elements) to ignore mouse-clicks, making them fall through to whatever was underneath. Now this has some obviously helpful uses such as with avatar name tags; these are pieces of UI attached to objects in worldspace that can sometimes get in the way of mouse-clicks intended for movement. But it could also be easily abused, and it didn't take long for Crwth to think of a way to use it, with the intended target being the user-to-user coin gifting.<br><br>Coin gifting (which has only recently been removed again in preparation for testing "Real Money" systems) was an in-world functionality that allowed one player to give some of their fake Metaplace play-dough money to another player. This was all safely locked away in the Secure Features module, which relies on closed-source scripts for its security. Closed-source scripts, <i>if used correctly</i>, can be very good at keeping your code and data locked up tight. Although this hadn't always been the case - there were times when they were not so closed and exposed their data to anyone! - by the time coin gifting came around they were pretty secure. <br><br>If you wanted to exploit coin gifting, for example trying to get someone to give you more than they wanted to, then you couldn't do it by trying to change the data within the secured gifting 'session'. But coin gifting did have a weakness; it required user input. The user needed to enter the amount of coins they wished to transfer and then again approve that transfer on a confirmation balance window. The user has to trust that the User Interface displayed to them is accurate and that they will only be transferring the amount they expect to.<br><br>Crwth's idea was to exploit this trust by placing his own UI on top of the 'real' UI. The fake UI would use UiPickable() to allow the button clicks to pass down to the real UI, which was using different values than what the user expected. But it wouldn't even have to be similar UI; a user could think they were playing a game in someone's world, but really they were transferring their coins to the world owner.<br><br>At the time this was discussed there was still no support for UiPickable in the client, so it couldn't be tested, but that didn't stop me from trying to implement something similar.<br>This vector of attack relied on the user actually wanting to perform a coin transfer and conning the user into transferring an unwanted amount by making subtle tweaks to the actual coin transfer UI itself.<br><br><b>On to the gory details:</b><br>A coin transfer was initiated from the context menu on a user; you would click the user you wanted to give coins to and select the option from the menu that popped up. This started a session from the <i>mpsec_start_coin_gift</i> trigger. Since it used a trigger you could write a script that also had a version of this trigger, attached to the player template, so you could know when a transfer session had started and which user was the target. This on its own doesn't do you much good; while you could block the actual session from starting by preventing other implementations of that trigger from firing, you couldn't really put your own fake transfer in its place, as only the 'Secure Features' script has the privileges to perform an actual transfer. But it did allow your script to know when to try begin exploiting.<br><br>Since my script (or any likely attacking script) was attached after the 'Secure Features' script, my version of the trigger fired first. By this point there was no session and no UI to try and meddle with. So I used a SendTo() to fire my own custom trigger but with a delay of 10ms (it would actually be about 30ms on average in practice due to the time it takes to set up a new execution frame). By the time this trigger actually fires the coin transfer UI will have been built, but in order to do anything to this UI you need to know what its ID numbers are.<br><br>Each UI creation function returns a User Interface ID which can be used to manipulate that UI element after creation, such as attaching, deleting or changing values. In order to use these values you have to manually store them as they are not publicly accessible from anywhere else. So how can you get your hands on the IDs for already created UI that you did not make?<br><br>The IDs are created sequentially; if an element you just made has an ID of 15 you can be reasonably sure that the element created immediately before it has an ID 14. In our case we are trying to look for the UI almost immediately after it was created, before it has even had a chance to be sent to the client. If you waited too long there could be a chance that some other innocent UI was created in the interval and therefore spoil your attack.<br><br>I manually examined the MetaMarkup tags that are sent from the server to the clients and counted how many UI elements had been created for the coin transfer. Then in the first line of my custom trigger I immediately create a new UiElement and get its ID. I then subtracted the expected number elements for the coin transfer UI to get to its parent element. Alternatively you could just count back far enough to the individual child element you want to alter, such as the text field and the button, but going back to the parent demonstrates two weaknesses for the price of one.<br><br>I could now use the newly acquired parent ID and use it with the UiFindWindow() function, which takes a parent id and a target element name. So I used that to find the text field<br><blockquote>Code: MetaScript<hr><span class=standard_text style="font-family:'courier new',courier,monospace"><span style='color:#0000ff'>local</span>&nbsp;uiId&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiElement(0,'my_win<span style='color:#0000ff'>do</span>w_finder',&nbsp;0,0)<br>uiId&nbsp;<span style='color:#ff0000'>=</span>&nbsp;uiId&nbsp;-&nbsp;9<br><span style='color:#0000ff'>local</span>&nbsp;text_field&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiFindWin<span style='color:#0000ff'>do</span>w(uiId,'amount_input')<br></span><hr></blockquote><br>This is the valid text field where the user enters the amount to be transferred. But instead of allowing the user to input their value here I made it invisible and changed the value to my own<br><blockquote>Code: MetaScript<hr><span class=standard_text style="font-family:'courier new',courier,monospace">UiVisible(text_field,0)<br>UiText(text_field,&nbsp;'1337')<br></span><hr></blockquote><br>This will set up the session to transfer 1337 coins no matter what value the user inputs. But as of now the user has nowhere to enter a value, so I have to create a new text field that looks just like the old one.<br><blockquote>Code: MetaScript<hr><span class=standard_text style="font-family:'courier new',courier,monospace"><span style='color:#0000ff'>local</span>&nbsp;submit&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiFindWin<span style='color:#0000ff'>do</span>w(ui,'yes_button')<br><span style='color:#0000ff'>local</span>&nbsp;text_field_bg&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiFindWin<span style='color:#0000ff'>do</span>w(ui,'amount_bg')<br><span style='color:#0000ff'>local</span>&nbsp;new_field&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiTextField(text_field_bg,'hack_field',10,7,145,15,&nbsp;255,255,255,&nbsp;0,0,0,0,&nbsp;'mpsec_coin_g<span style='color:#0000ff'>if</span>t&nbsp;'..user_id..'&nbsp;1337',&nbsp;100&nbsp;)<br>UiButtonField(submit,&nbsp;new_field)<br></span><hr></blockquote><br>This finds the background element that was created for the real text field and submit button. The new field is then attached to the background in the correct place and its command has my hacked value appended to it, this is just in case the user tries to submit by hitting the enter key in the field rather than clicking on the submit button.<br>The new field is also attached to the button (I can't quite remember why I did this, and I can't test it any more to find out. I may have been trying to see what value the user entered to use it later on).<br><br>When the <i>mpsec_coin_gift</i> command was sent, it now used the 1337 value for the transfer, but before doing so it generated a confirmation screen that showed the users current coin balance, the amount to be transferred and then the resultant coin balance. This was a bit tricky, as at this point the displayed transfer value was 1337, which the user would surely notice as not being the value they entered. I would need to again grab that new UI and change it, but to what? At the time (as I recall) intercepting the command with the user entered value proved a failure so you'd just have to wing it, changing the value back to the default 100 and hope the user saw what they wanted to see.<br><br>Or this is where a bit of social engineering could come in. You could only ask a user to transfer you the value that would ultimately be displayed on the confirmation screen. So you say "send me 500 coins", they input 500, 500 is then displayed on the confirm window, but they are actually sending you 5,000.<br><br>Or there is the <i>real</i> engineering way. Don't hardcode in a value but set up up a new command that only you use and then use that to prime the value to the used. You agree a value to be transferred, then before they get to sent it you quickly fire off a command with that value so that it is used in the display.<br><br>The only wrinkle in these methods is that they both fail to alter the last bit of information, the resultant balance. While you can alter a value in a UI element you can not extract a current value, and a users coin balance is considered privileged information so you can't access it. You just have to hope that no one in their right mind is <i>actually</i> going to add up the values to see if the balances match.<br><br>I tried this attack once and only once... on the Metaplace developer who made the coin transfer code. I got him to try and send me 100 coins from within my world, but the value that popped over his head as the transfer finally went through was 1337!<br><br>Some may think that detailing all of this now in public is just going to help the exploiters, giving them a way to con the innocent Metaplace user. But I take the view that you can not know how to create a robust secure application unless you know the potential ways in which it can be exploited. After this was demonstrated, the coin transferring code was altered to help prevent this kind of attack. But it shouldn't be just the Metaplace developers who know how it could happen, everyone on Metaplace is a potential content developer. All builders and scripts should know those kinds of exploits (which is clearly why I am writing it on a site nobody reads!).<br><br>My as yet unreleased PayPal module faced the same problem and I used a similar method to combat it. This attack relies on someone else knowing how many UI element IDs to count back to in order to find the correct elements to alter, and also optionally the names of the elements used. This can be combated by casting doubts on those assumptions.<br><blockquote>Code: MetaScript<hr><span class=standard_text style="font-family:'courier new',courier,monospace"><br>--utility&nbsp;<span style='color:#0000ff'>function</span>s<br><span style='color:#0000ff'>function</span>&nbsp;r<span style='color:#0000ff'>and</span>_ui_ele()<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#0000ff'>local</span>&nbsp;r&nbsp;<span style='color:#ff0000'>=</span>&nbsp;math.ceil(&nbsp;((math.ran<span style='color:#0000ff'>do</span>m()*100)/10)&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#0000ff'>for</span>&nbsp;1,r&nbsp;<span style='color:#0000ff'>do</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UiElement(0,'fake&nbsp;ui',0,0)<br>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#0000ff'>end</span><br><span style='color:#0000ff'>end</span><br><span style='color:#0000ff'>function</span>&nbsp;r<span style='color:#0000ff'>and</span>_ui_name()<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;MD5(<span style='color:#ff0000'>os</span>.time()..':'..math.ran<span style='color:#0000ff'>do</span>m())<br><span style='color:#0000ff'>end</span><br><br>--build&nbsp;our&nbsp;UI<br>r<span style='color:#0000ff'>and</span>_ui_ele()<br><span style='color:#0000ff'>local</span>&nbsp;uiId&nbsp;<span style='color:#ff0000'>=</span>&nbsp;UiElement(0,'myParentUI'..r<span style='color:#0000ff'>and</span>_ui_name(),0,0)<br>r<span style='color:#0000ff'>and</span>_ui_ele()<br>UiLabel(uiId,'myTextLabel'..r<span style='color:#0000ff'>and</span>_ui_name(),0,0,'can&nbsp;you&nbsp;find&nbsp;me?!')<br>r<span style='color:#0000ff'>and</span>_ui_ele()<br>UiAttachUser(<span style='color:#ff0000'>self</span>,uiId)<br></span><hr></blockquote><br>This code creates a random number of UI element IDs before, in between and after each newly created piece of UI, which prevents someone from simply counting back a known number of elements. It also appends random strings to the ends of UI element names so that they can not be accessed that way.<br>This likely won't prevent all future attacks on UI, but it is a good place to start.<br><br>As for UiPickable()... well, we never did get support for that in the client (perhaps due to this demonstration?), which is a shame since there are cases where it could be useful, even safe. For example I see no reason why it shouldn't be allowed for UI elements that are attached to objects, in worldspace. Those will always be behind the screen level UI and so have no chance to interfere. It is also probably where it is more useful. ]]></content:encoded></item></channel></rss>
