<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7968606659605866343</id><updated>2012-01-22T21:14:25.567-08:00</updated><category term='Indie Indian'/><category term='Announcement'/><category term='Game Development'/><category term='Silverlight'/><category term='Game Tech'/><title type='text'>Adventures in Independent Game Development</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-478620471675687142</id><published>2011-12-22T22:15:00.000-08:00</published><updated>2011-12-22T22:22:37.358-08:00</updated><title type='text'>Porting our HTML5 canvas game to mobile devices using AppMobi's DirectCanvas</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;So I had worked on &lt;a href="http://misbehavincat.appspot.com/" target="_blank"&gt;"go away, norman"&lt;/a&gt;&amp;nbsp;as part of the &lt;a href="http://indie-indian.blogspot.com/2011/11/go-away-norman.html"&gt;Babycastles game jam&lt;/a&gt;. I wrote it in&amp;nbsp;HTML5 directly using the Canvas and Audio APIs without using any of the game engines. But now I wanted it to run it as an App on Mobile devices - mainly iOS and Android. There are already frameworks like &lt;a href="http://phonegap.com/" target="_blank"&gt;PhoneGap&lt;/a&gt; which allow you to package HTML5 games as an App on mobile devices. These frameworks just wrap the WebView inside an App and provide extra APIs to access native device features(like accelerometer etc.). So it should be easy to port my game to the mobile device, right?&lt;br /&gt;&lt;br /&gt;Wrong - the problem is that the game uses HTML5 Canvas and the default implementation of Canvas in the iOS and Android browsers(and hence the WebView) is pretty bad. Even though the speed of Javascript has been improved in these mobile platforms the performance of Canvas has not improved by much.&lt;br /&gt;&lt;br /&gt;So how does one get their HTML5 Canvas game involving lot of drawing and fast action onto mobile devices?&lt;br /&gt;&lt;br /&gt;Enter &lt;a href="https://github.com/appMobi/ios" target="_blank"&gt;DirectCanvas&lt;/a&gt; from &lt;a href="http://www.appmobi.com/" target="_blank"&gt;AppMobi&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;DirectCanvas from AppMobi provides an HTML5 runtime environment with an OpenGL accelerated Canvas implementation(plus a better Audio implementation based on OpenAL and a native Box2D implementation for Physics simulation).&lt;br /&gt;&lt;br /&gt;The iOS implementation of DirectCanvas was recently open sourced by AppMobi(A big thanks to them!).&amp;nbsp;So I downloaded the DirectCanvas source from github and after a week of hacking was able to get my game working on the iPad (Most of the time was spent on getting it to work in landscape mode and understanding the sandboxed Javascript context for DirectCanvas - More on this in the next post). DirectCanvas provides almost a drop in replacement for the HTML5 Canvas and Audio API. Also my game had regular HTML elements for the very basic UI I had implemented and Canvas for the game area. DirectCanvas allowed me to use the accelerated Canvas as well as a WebView for the regular HTML elements (with some caveats - Again in the next post)&lt;br /&gt;&lt;br /&gt;I ran the ported App on a first generation iPad running iOS 4.3. The performance boost was huge compared to the mobile browser!! The game was very &amp;nbsp;responsive and played just like a game written as a native App. I don't have FPS numbers but the video at the end of this post should make the performance boost very clear.&lt;br /&gt;&lt;br /&gt;I am really excited about the future of DirectCanvas for indie game development not only because it works but because it is open source! (The Android implementation should also be going Open Source soon according to AppMobi) Any framework out there which allows you to develop cross platform and especially on mobile devices costs some non-trivial amount of fixed or recurring amount of money. I can probably afford it but it definitely cuts off some other people from developing cross-platform (Students, people in countries with unfavorable exchange rates etc.).&lt;br /&gt;&lt;br /&gt;More than the cost, open source means faster improvements to the framework. I can't wait to see what people will do with this. Here is my list&lt;br /&gt;&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Port all sorts of free HTML5 game engines to run on it and now you can automatically run them on the iOS (and soon on the Android)&lt;/li&gt;&lt;li&gt;Get &lt;a href="http://processingjs.org/" target="_blank"&gt;Processing.js&lt;/a&gt; running again on iOS using DirectCanvas and allow sketches to be published to the App Store without running into restrictions by Apple.&lt;/li&gt;&lt;li&gt;Add WebGL support to DirectCanvas and get &lt;a href="https://github.com/mrdoob/three.js/" target="_blank"&gt;three.js&lt;/a&gt; running on it - How about some HTML5 3D action on mobile devices ?!!&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If anyone is interested in&amp;nbsp;collaborating on the above projects drop me a line here or on twitter(&lt;a href="http://twitter.com/#!/vikerman" target="_blank"&gt;@vikerman&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;(And if you do have some money to spend and not so much time do checkout &lt;a href="http://www.appmobi.com/?q=node/27" target="_blank"&gt;AppMobi's XDK&lt;/a&gt;&amp;nbsp;- It provides an easy way to develop your games using the ImpactJS game engine and build and publish it on different platforms without the hassles of going through the SDK for each platform)&lt;br /&gt;&lt;br /&gt;And now here is a badly recorded video that shows the performance boost I got on my iPad by using DirectCanvas. The video shows how the game was unplayable on mobile Safari (which is what I would have got with something like PhoneGap) but plays smoothly as an App powered by DirectCanvas.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/c3BfBKiqdfE/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/c3BfBKiqdfE?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/c3BfBKiqdfE?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;(I should have captured more time towards the end when the game was getting a bit faster to show that the performance and responsiveness does not drop - but I was having a difficult time playing the game and shooting it through the phone camera). I will try to upload a better one in the future - I just couldn't wait to share this with everyone!!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-478620471675687142?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/478620471675687142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2011/12/porting-html5-canvas-game-to-mobile.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/478620471675687142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/478620471675687142'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2011/12/porting-html5-canvas-game-to-mobile.html' title='Porting our HTML5 canvas game to mobile devices using AppMobi&apos;s DirectCanvas'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-806675589698868950</id><published>2011-11-06T09:20:00.000-08:00</published><updated>2011-11-06T09:23:50.427-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><title type='text'>Go away, norman at Babaycastles!</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;The nice people at &lt;a href="http://www.babycastles.com/" target="_blank"&gt;Babycastles&lt;/a&gt; called us to setup "Go away, norman" as part of their closing party on Friday along with the winning games from the Parsons game jam. It was a pleasant surprise and I was totally kicked to show the game at Babycastles! (If you don't know what Babycastles parties are about here is an article from someone who can explain it much better -&amp;nbsp;&lt;a href="http://www.diedagain.com/a-laymans-take-on-babycastles"&gt;http://www.diedagain.com/a-laymans-take-on-babycastles&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;We got one of the cabinets to setup our game and we hooked up my laptop to the monitor and one of the gamepad controller they had to my Mac. Made some last minute fixes to the code so that the game is centered on the screen and we were ready to go. Everything was looking ok when someone found a bug - if the mouse went off the screen on the right the game was essentially on a never ending loop and it could be easily reproduced. I had to go behind the cabinet and fix it in 'vi' to add &amp;nbsp;the extra check in the javascript. There is a charm with working with these physical things and hacked up code. Makes you feel more like Steve Jobs and Wozniack hacking on their first computer.&lt;br /&gt;&lt;br /&gt;The party was a blast! There were performances by&amp;nbsp;&lt;a href="http://www.myspace.com/avalunaband" target="_blank"&gt;Ava Luna&lt;/a&gt;&amp;nbsp;followed by the legendary Wu Tang clan. It was such a great feeling to see people walk up to our game and play it. The best part was when people actually got excited as they were almost caught by norman. We have some ways to go before it becomes a proper game - but it was nice to see people enjoy for what it is currently.&lt;br /&gt;&lt;br /&gt;Thank You Babycastles.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-K2Kqm2H-uUM/Tra_F5wBZUI/AAAAAAAABIk/1ej1cm8CZB4/s1600/IMG_20111104_162844.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-K2Kqm2H-uUM/Tra_F5wBZUI/AAAAAAAABIk/1ej1cm8CZB4/s200/IMG_20111104_162844.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uYMRXdad-Jo/Tra-_owaT2I/AAAAAAAABIc/vQ3xj21h8mw/s1600/IMG_20111104_163937.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-uYMRXdad-Jo/Tra-_owaT2I/AAAAAAAABIc/vQ3xj21h8mw/s200/IMG_20111104_163937.jpg" width="150" /&gt;&lt;/a&gt;&lt;/div&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-arXIv6MvpAg/Tra-7NwzvkI/AAAAAAAABIU/gzZ9gz6yuwU/s1600/IMG_20111104_180155.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-arXIv6MvpAg/Tra-7NwzvkI/AAAAAAAABIU/gzZ9gz6yuwU/s200/IMG_20111104_180155.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2p7plFsJ5EY/Tra-zETddyI/AAAAAAAABIM/dXdOsrpzQP4/s1600/IMG_20111104_212428.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-2p7plFsJ5EY/Tra-zETddyI/AAAAAAAABIM/dXdOsrpzQP4/s200/IMG_20111104_212428.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&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;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-zzhGgEtexm0/Tra-g3DucXI/AAAAAAAABIE/VtBIURYwxNs/s1600/IMG_20111104_231252.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-zzhGgEtexm0/Tra-g3DucXI/AAAAAAAABIE/VtBIURYwxNs/s200/IMG_20111104_231252.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/-Rh2y2Xk1_ro/Tra-W8QyOHI/AAAAAAAABH8/DBOqrcykId8/s1600/IMG_20111105_000207.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-Rh2y2Xk1_ro/Tra-W8QyOHI/AAAAAAAABH8/DBOqrcykId8/s200/IMG_20111105_000207.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-806675589698868950?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/806675589698868950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2011/11/go-away-norman-at-babaycastles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/806675589698868950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/806675589698868950'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2011/11/go-away-norman-at-babaycastles.html' title='Go away, norman at Babaycastles!'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-K2Kqm2H-uUM/Tra_F5wBZUI/AAAAAAAABIk/1ej1cm8CZB4/s72-c/IMG_20111104_162844.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-1191031374197461592</id><published>2011-11-03T08:10:00.000-07:00</published><updated>2011-11-03T09:18:10.540-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Tech'/><title type='text'>go away, norman</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Back from the dead. After two exciting years find myself in a different job and New York. A new start. Hopefully will not ignore my game creation itch this time.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It got rebooted thanks to the amazing folks at Babycastles and Parson school of design, who organized a game jam about a week ago.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Teamed up with the amazing &lt;a href="http://neonjelly.net/"&gt;geejay&lt;/a&gt; who handled everything from art to sound to level design as I floundered to finish the game code in 48 hours. I knew writing code from scratch in a game jam was bad idea - but I didn't have time to prepare on anything else. So just Javascript and HTML5 canvas it was. Spent a stupid amount of time on the collision detection. If I did it again I would probably just figure out some engine with basic collision detection before the game jam. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The theme of the game jam was any tweet from &lt;a href="http://twitter.com/#!/Horse_ebooks"&gt;@Horse_ebooks&lt;/a&gt; and we picked "Solution to Cat behavior problems" and "It will catch up with you". So here it is our game - "go away, norman"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://2.bp.blogspot.com/-_SRyyblS6AU/TrK-OQMYk0I/AAAAAAAABHw/SpFr6TOn1js/s400/301070_10150423491881407_628486406_9823173_1095037590_n.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5670804032887231298" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 243px; " /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can play it &lt;a href="http://misbehavincat.appspot.com/"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We are continuing to work on it - Expect a more official release soon...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-1191031374197461592?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/1191031374197461592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2011/11/go-away-norman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/1191031374197461592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/1191031374197461592'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2011/11/go-away-norman.html' title='go away, norman'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-_SRyyblS6AU/TrK-OQMYk0I/AAAAAAAABHw/SpFr6TOn1js/s72-c/301070_10150423491881407_628486406_9823173_1095037590_n.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-3475978996935231978</id><published>2010-01-17T12:26:00.000-08:00</published><updated>2010-01-17T12:53:42.769-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><title type='text'>Game Project update</title><content type='html'>Been long since I updated this blog with any details. Work on my next game has been spotty over all, but it has picked up in the last few weeks. Hopefully I can maintain the momentum. I have been playing around with new ideas and been learning quite a bit in the process. I have also solidified broad ideas for the game. For now I can tell you it's going to be a narrative game with story telling - Something other casual games have shunned but has been my interests - And probably leaves an opening for something to be explored.&lt;br /&gt;&lt;br /&gt;Here is an updated screenshot from the work in progress (With clues on its internal name). Good to see it has come some ways from the last one but clearly I could use artists. For the next next game maybe...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SkoaJ8HMQlg/S1NzKAP4UOI/AAAAAAAAAO8/ku6OyjrWAcU/s1600-h/LastCowboy-Screenshot.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 299px;" src="http://2.bp.blogspot.com/_SkoaJ8HMQlg/S1NzKAP4UOI/AAAAAAAAAO8/ku6OyjrWAcU/s400/LastCowboy-Screenshot.jpg" alt="" id="BLOGGER_PHOTO_ID_5427808591614071010" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-3475978996935231978?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/3475978996935231978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2010/01/game-project-update.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3475978996935231978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3475978996935231978'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2010/01/game-project-update.html' title='Game Project update'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_SkoaJ8HMQlg/S1NzKAP4UOI/AAAAAAAAAO8/ku6OyjrWAcU/s72-c/LastCowboy-Screenshot.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-1578795409189169194</id><published>2009-09-02T10:04:00.000-07:00</published><updated>2009-09-02T10:09:34.550-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><title type='text'>My next project</title><content type='html'>Been busy working on my next project. Just wanted to update with this post to see what people think about it.&lt;br /&gt;&lt;br /&gt;Can anyone guess what the game is going to be about?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SkoaJ8HMQlg/Sp6mDKDppUI/AAAAAAAAAOA/SvMuq1bYnyM/s1600-h/Screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 230px;" src="http://2.bp.blogspot.com/_SkoaJ8HMQlg/Sp6mDKDppUI/AAAAAAAAAOA/SvMuq1bYnyM/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5376917578296436034" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-1578795409189169194?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/1578795409189169194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/09/my-next-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/1578795409189169194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/1578795409189169194'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/09/my-next-project.html' title='My next project'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_SkoaJ8HMQlg/Sp6mDKDppUI/AAAAAAAAAOA/SvMuq1bYnyM/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-4452672763298233519</id><published>2009-08-07T10:11:00.000-07:00</published><updated>2009-08-17T12:38:26.943-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Tech'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Please Save the Great Flea Circus!</title><content type='html'>After two weeks in development I am happy to announce the release of my first game - "The Great Flea Circus". You can play it in a few nice places that host Silverlight games.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://gamejolt.com/online/games/action/the-great-flea-circus/592/"&gt;http://gamejolt.com/online/games/action/the-great-flea-circus/592/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mashooo.com/SilverlightGames/The_Great_Flea_Circus.aspx"&gt;http://www.mashooo.com/SilverlightGames/The_Great_Flea_Circus.aspx&lt;/a&gt;&lt;a href="http://silverarcade.com/"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;a href="http://www.silverlightclub.com/apps/PlayApp.aspx?AppId=114"&gt;http://www.SilverlightClub.com/apps/PlayApp.aspx?AppId=114&lt;/a&gt;&lt;br /&gt;&lt;a href="http://silverarcade.com/games/vikerman/the-great-flea-circus/"&gt;http://silverarcade.com/games/vikerman/the-great-flea-circus/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://gamejolt.com/online/games/action/the-great-flea-circus/592/"&gt;&lt;img id="BLOGGER_PHOTO_ID_5367278976483350370" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: pointer; HEIGHT: 300px; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_SkoaJ8HMQlg/SnxnysO2V2I/AAAAAAAAANc/3phg-pShauU/s400/Screenshot.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What's with the name "The Great Flea Circus"? Well, the game is a clone of Circus Atari and hence the circus part. The flea part came because the characters I initially drew looked like fleas. Hence I made the theme a Flea circus instead of a regular circus!&lt;br /&gt;&lt;br /&gt;The main purpose of this game was to test the feasibility of using Silverlight for game development - And I have concluded it is not only feasible it is absolutely the most productive way to develop a game given my .NET background.&lt;br /&gt;&lt;br /&gt;Also after my previous post I have decided to switch to using Microsoft Expression Blend for the game development. Particularly I have been using the Behaviors feature in Silverlight to separate game logic(code) and game design(in Blend). For example in the Blend design window I just attach the behavior &lt;span style="FONT-STYLE: italic"&gt;Paddle &lt;/span&gt;&lt;span style="font-size:+0;"&gt;to the paddle in the designer and &lt;i&gt;Jumper &lt;/i&gt;to the two jumpers. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:+0;"&gt;An interesting thing happened where behaviors were really useful - When I showed the game to my wife (A great play tester and critic !) she asked me why there is ball in the middle of the screen which doesn't interact with the Jumpers. So I added the &lt;i&gt;Bounce &lt;/i&gt;behavior(which the two black blocks on the sides have) to the ball and viola!, the Jumpers now bounce off the ball in the middle. It turned out to be a nice twist to the gameplay and so I left it in. Also check out the cheesy animation I put on the Ferris wheel in the background through Blend.&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:+0;"&gt;More on Silverlight, Blend and Behaviors in a later post. Now go and "Please Save the Great Flea Circus!! "&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-4452672763298233519?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/4452672763298233519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/08/please-save-great-flea-circus.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/4452672763298233519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/4452672763298233519'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/08/please-save-great-flea-circus.html' title='Please Save the Great Flea Circus!'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_SkoaJ8HMQlg/SnxnysO2V2I/AAAAAAAAANc/3phg-pShauU/s72-c/Screenshot.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-3186502484700757737</id><published>2009-07-20T23:44:00.001-07:00</published><updated>2009-07-21T21:03:00.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Tech'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Loading SVG from a Silverlight Application</title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;The problem:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;I want to use SVG files as the underlying graphics format for my Silverlight game.&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;First why do I want to use vector graphics for all my game graphics assets? Since vector graphics are resolution independent this allows me to create the content once and scale it to the required resolution depending on the target platform without any loss of quality(which is not the case with bitmap image formats like PNG). The same graphic asset can then be used today on the web, tomorrow on some lower resoluton mobile device and later on a full screen view on a HDTV.&lt;br /&gt;&lt;br /&gt;What is SVG? In short, &lt;a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt; is an open file format that describes a vector graphics image. There are free and excellent tools like &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; that lets us create images in the SVG format.&lt;br /&gt;&lt;br /&gt;What is XAML? &lt;a href="http://en.wikipedia.org/wiki/XAML"&gt;XAML&lt;/a&gt; is the basic application markup language for Silverlight and is also very good at describing vector graphics. Then why don't I just use XAML for my vector graphics? The main reason is that I want to keep the original format of my game assets to be portable to other platforms. &lt;br /&gt;&lt;br /&gt;So thats the problem in short - I want to be able to create my game graphics in Inkscape as SVG and load it into my Silverlight Application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;The solutions that didn't work&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;The solution path is obvious - Convert SVG to XAML which Silverlight understands and load it into the Silverlight application. Either I can do the conversion during build time or do it dynamically at runtime. The solution which can load at runtime would get extra bonus points.&lt;br /&gt;&lt;br /&gt;So I looked at various existing conversion tools for converting from SVG to XAML.&lt;br /&gt;&lt;br /&gt;Here is a list of the ones that I tried and rejected.&lt;br /&gt;&lt;br /&gt;1) Inkscape XAML exporter - The current version on Windows has known &lt;a href="https://bugs.launchpad.net/inkscape/+bug/282421"&gt;bug&lt;/a&gt; and crashes. Also it is difficult to integrate this with the build process.&lt;br /&gt;2) The commercial ViwerSVG - Allows to dynamically load SVG into a WPF application(Silverlight also I would assume). I gave it a quick spin and not very happy with the conversions. And the price tag was too heavy.&lt;br /&gt;3) Next I tried the excellent &lt;a href="http://www.codeplex.com/XamlTune"&gt;XamlTune&lt;/a&gt;. The conversions from SVG to XAML were great and it had a command line utility which I could use as part of the build process. I saw the &lt;a href="http://labs.ucaya.com/xamltune/"&gt;live version of XamlTune&lt;/a&gt; and was even more excited. The only problem was that the output from XamlTune works with WPF but is not exactly friendly towards the subset of XAML supported by Silverlight. I needed to find a better solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;THE REAL SOLUTION : SVG2XAML.XSL&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;Enter svg2xaml.xsl. This is a &lt;a href="http://en.wikipedia.org/wiki/XSL_Transformations"&gt;XSL transform &lt;/a&gt;written originally by one &lt;a href="http://sanpaku72.blogspot.com/2007/09/having-fun-with-xaml-silverlight-and.html"&gt;Toine de Greef&lt;/a&gt;. It basically provides the rules to convert a SVG file to a XAML file and it supports Silverlight XAML! As it turns out Inkscape uses this same XSL to actually do the XAML export So I got the XSL from Inkscape since I thought it would have some extra bug fixes to it.&lt;br /&gt;&lt;br /&gt;So now I could use a command line XSL processor like msxsl.exe and use SVG2XAML.xsl to convert SVG to XAML and it worked really well with the sample set of SVG files I had.&lt;br /&gt;&lt;br /&gt;Now only the bonus question remained. Can I use svg2xaml.xsl to dynamically load SVG into my silverlight application? I had seen the live version of XamlTune. It seems to be using server processing for converting SVG to XAML. But that seems to be a waste of server resources. If I wrote a silverlight game I would like to avoid using sever resources since it costs money for the server CPU and bandwidth.&lt;br /&gt;&lt;br /&gt;Can I do it entirely on the client side? As it turned out I can! Eventhough Silverlight itself doesn't support doing XSL Transforms it can call into javascript code which can do the XSL transform and return back the transformed XML.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Using client-side Javascript to convert SVG to XAML&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;The following is the Javascript code I used to do the XSL transforms from SVG to XAML. The script loads svg2xaml.xsl which in turn refers to colors.xml. I made some extra fixes to svg2xaml which allowed me to succesfully convert few more SVG files succesfully - You can get the updated &lt;a href="http://vikram.subramanian.googlepages.com/svg2xaml.xsl"&gt;svg2xaml.xsl &lt;/a&gt;and &lt;a href="http://vikram.subramanian.googlepages.com/colors.xml"&gt;colors.xml&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can use the following Javascript code in the page that loads the silverlight control.&lt;br /&gt;&lt;br /&gt;&lt;pre style="BORDER-BOTTOM: #999999 1px dashed; BORDER-LEFT: #999999 1px dashed; PADDING-BOTTOM: 5px; LINE-HEIGHT: 14px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 5px; WIDTH: 100%; PADDING-RIGHT: 5px; FONT-FAMILY: Andale Mono, Lucida Console, Monaco, fixed, monospace; COLOR: #000000; FONT-SIZE: 12px; OVERFLOW: auto; BORDER-TOP: #999999 1px dashed; BORDER-RIGHT: #999999 1px dashed; PADDING-TOP: 5px"&gt;&lt;code&gt;function loadXMLDoc(xml, isFileName) {&lt;br /&gt;&lt;br /&gt;    var xmlDoc = null;&lt;br /&gt;&lt;br /&gt;    // code for IE&lt;br /&gt;    if (window.ActiveXObject) {&lt;br /&gt;        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");&lt;br /&gt;        xmlDoc.async = false;&lt;br /&gt;&lt;br /&gt;        if (isFileName) {&lt;br /&gt;            xmlDoc.load(xml);&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            xmlDoc.loadXML(xml);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    // code for Mozilla, Firefox, Opera, etc.&lt;br /&gt;    else if (document.implementation &amp;amp;&amp;amp; document.implementation.createDocument) {&lt;br /&gt;&lt;br /&gt;        if (isFileName) {&lt;br /&gt;            xmlDoc = document.implementation.createDocument("", "", null);&lt;br /&gt;            xmlDoc.async = false;&lt;br /&gt;            xmlDoc.load(xml);&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;            parser = new DOMParser();&lt;br /&gt;            xmlDoc = parser.parseFromString(xml, "text/xml");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return (xmlDoc);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function svg2xaml(svgString) {&lt;br /&gt;    var xml = loadXMLDoc(svgString, false);&lt;br /&gt;    var xsl = loadXMLDoc("svg2xaml.xsl", true);&lt;br /&gt;&lt;br /&gt;    if ((xml != null) &amp;amp;&amp;amp; (xsl != null)) {&lt;br /&gt;&lt;br /&gt;        // code for IE&lt;br /&gt;        if (window.ActiveXObject) {&lt;br /&gt;            result = xml.transformNode(xsl);&lt;br /&gt;            return result;&lt;br /&gt;        }&lt;br /&gt;        // code for Mozilla, Firefox, Opera, etc.&lt;br /&gt;        else {&lt;br /&gt;            xsltProcessor = new XSLTProcessor();&lt;br /&gt;            xsltProcessor.importStylesheet(xsl);&lt;br /&gt;            resultDocument = xsltProcessor.transformToDocument(xml)&lt;br /&gt;&lt;br /&gt;            var serializer = new XMLSerializer();&lt;br /&gt;            var xaml = serializer.serializeToString(resultDocument.documentElement);&lt;br /&gt;&lt;br /&gt;            return xaml;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then you can call this javascript function from your silverlight code to convert the SVG file to XAML which can then be loaded in the silverlight application. The following code prompts the user to select a SVG file on the local computer's file system and converts into XAML by calling into the javascript code using HtmlPage.Window.Invoke. It then displays it so that it fits the current silverlight control dimensions. "mapCanvas" in the code below is the just the main Canvas object that displays the loaded SVG image.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;...&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Windows.Browser;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Windows.Markup;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            OpenFileDialog fileDialog = new OpenFileDialog();&lt;br /&gt;            fileDialog.Filter = &amp;quot;Graphics files (*.svg)&amp;#124;*.svg&amp;quot;;&lt;br /&gt;&lt;br /&gt;            if (fileDialog.ShowDialog() == true)&lt;br /&gt;            {&lt;br /&gt;                string svg = null;&lt;br /&gt;                using (StreamReader reader = fileDialog.File.OpenText())&lt;br /&gt;                {&lt;br /&gt;                    // Store file content in 'text' variable   &lt;br /&gt;                    svg = reader.ReadToEnd();&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                try&lt;br /&gt;                {&lt;br /&gt;                    // Call the Javascript XSLT processor to convert SVG to XAML&lt;br /&gt;                    Object returnVal = HtmlPage.Window.Invoke(&amp;quot;svg2xaml&amp;quot;, svg);&lt;br /&gt;                    if (returnVal != null)&lt;br /&gt;                    {&lt;br /&gt;                        string xaml = (string)returnVal;&lt;br /&gt;&lt;br /&gt;                        Canvas canvas = (Canvas)XamlReader.Load(xaml);&lt;br /&gt;&lt;br /&gt;                        double scale = Math.Min(640.0 / canvas.ActualWidth, 480.0 / canvas.ActualHeight);&lt;br /&gt;&lt;br /&gt;                        ScaleTransform scaleTransform = new ScaleTransform();&lt;br /&gt;                        scaleTransform.ScaleX = scaleTransform.ScaleY = scale;&lt;br /&gt;                        canvas.RenderTransform = scaleTransform;&lt;br /&gt;                        canvas.RenderTransformOrigin = new Point(0, 0);&lt;br /&gt;&lt;br /&gt;                        canvas.SetValue(Canvas.LeftProperty, (mapCanvas.ActualWidth - (canvas.ActualWidth * scale)) / 2);&lt;br /&gt;                        canvas.SetValue(Canvas.TopProperty, (mapCanvas.ActualHeight - (canvas.ActualHeight * scale)) / 2);&lt;br /&gt;&lt;br /&gt;                        mapCanvas.Children.Clear();&lt;br /&gt;                        mapCanvas.Children.Add(canvas);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                catch (Exception ex)&lt;br /&gt;                {&lt;br /&gt;                    mapCanvas.Children.Clear();&lt;br /&gt;                    TextBlock text = new TextBlock();&lt;br /&gt;                    text.Text = ex.Message;&lt;br /&gt;&lt;br /&gt;                    mapCanvas.Children.Add(text);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Demo:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;You want to see something cool? Here is the Live version of the silverlight application served via &lt;a href="http://silverlight.live.com/"&gt;Silverlight streaming&lt;/a&gt;. You can download the following test SVG files locally and then load them into the live application by clicking on "Load Graphics" and selecting the local SVG file (Wikipedia has tonnes of public SVG graphics).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/en/e/e3/Firefox-logo.svg"&gt;Firefox-logo.svg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/4/4a/Inkscape.logo.svg"&gt;Inkscape.logo.svg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/a/a5/Map_of_USA_with_state_names.svg"&gt;Map_of_USA_with_state_names.svg&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;devlive:slscontrol silverlightVersion="2.0" src="/104718/SVG2XAML/" installationMode="inline"&gt;&lt;/devlive:slscontrol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Caveats&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;The XSL transform is not perfect. Some SVG files might error out during conversion. It works well for most SVG files created with Inkscape which stick to mostly Paths and use linear or radial gradients.&lt;br /&gt;&lt;br /&gt;Also, even though the above javascript code tries to be cross-browser it does not work very well outside IE and FireFox. IE works the best with this code. Even Firefox doesn't work completely because the XSL transform applied is slightly different than IE. The XSL transform behavior is so different in Opera that many of the sample SVGs above don't even work. Safari didn't even come to the transformation part of the javascript.&lt;br /&gt;&lt;br /&gt;Please consider this as a proof of concept. I will be posting updates to the SVG2XAML XSL and the Javascript code as I figure out how to fix these problems.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;So there we have it. The ability to load SVG graphic files from a Silverlight application and that too dynamically at runtime. What use is it to load the SVG file dynamically at runtime by doing conversions in the client side? Think Live Game Map Editors... &lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-3186502484700757737?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/3186502484700757737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/07/loading-svg-from-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3186502484700757737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3186502484700757737'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/07/loading-svg-from-silverlight.html' title='Loading SVG from a Silverlight Application'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-72608833522624359</id><published>2009-07-09T18:53:00.000-07:00</published><updated>2009-07-13T13:48:30.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Tech'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight for games</title><content type='html'>&lt;strong&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:180%;"&gt;Target set. Weapons chosen&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What sort of game do I want to build?&lt;/strong&gt;&lt;br /&gt;Even though this blog is quite recent, I have been thinking about the kind of game I want to make for a long time. I asked myself - "What do I miss in games these days?". Then I knew what I wanted to build. A simple 2D adventure game with a deep plot line. A game simple enough that anyone can pick up and play. A game that packs entertainment in a nice little package so that you don't have to invest 40-80 hours to finish it.&lt;br /&gt;&lt;br /&gt;A game where the story is central and the graphics and game play are just elements that help in telling the story. A game which someone shouldn't feel bad for giving up a good book for (OK -I might be setting the standards too high here)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Weapon of choice?&lt;/strong&gt;&lt;br /&gt;Having decided what I wanted to build I started thinking of the tools I want to use to build the game.&lt;br /&gt;&lt;br /&gt;My initial choice was XNA and it was an obvious choice for games. I have been dabbling with it and was quite excited about being able to deliver games on the Xbox 360 through the Community Games channel. I had even figured out the toolset with &lt;a href="http://www.getpaint.net/"&gt;Paint.NET &lt;/a&gt;for pixel art and a custom Game Map Editor like the &lt;a href="http://xnafantasy.wordpress.com/2009/01/31/xna-map-editor-v31-released/"&gt;Xna Map Editor &lt;/a&gt;and even looked at &lt;a href="http://silverlua.codeplex.com/"&gt;SilverLua&lt;/a&gt; for game scripting.&lt;br /&gt;&lt;br /&gt;Then I started looking at &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; for the Game Map Editor since it was much easier to get traditional UI as well as 2D graphics needed for the map editor(instead of hacking XNA with WnForms). This is when something clicked inside me. Suddenly &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; which shares its API with WPF seemed to be a really compelling option.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Silverlight vs XNA&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Advantages of XNA&lt;/strong&gt;&lt;br /&gt;1. Ability to deliver the game on Xbox360(or the Zune). There is no other way to do this currently without XNA.&lt;br /&gt;&lt;br /&gt;2. XNA is built for games. Silverlight on the other hand is not. There might need to be some adjustments made and some performance/features sacrificed owing to this.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Advantages of Silverlight&lt;/strong&gt;&lt;br /&gt;1. With the little info available XNA community game sales, it seemed to be &lt;a href="http://www.joystiq.com/2009/03/30/gamerbytes-study-shows-disappointing-sales-for-xna-community-gam/"&gt;not that exciting after all&lt;/a&gt;. I felt more and more that PC was a bigger delivery platform especially given the nature of the game. I had better chances of delivering it to a more casual audience through the PC than the Xbox. For this Silverlight is much better suited than XNA since I don't have to worry about installation, runtime redistribution issues in Silverlight like I would have to do with XNA.&lt;br /&gt;&lt;br /&gt;2. As an added bonus I can &lt;em&gt;potentially&lt;/em&gt; get the game delivered cross-platform to Mac and Linux if I used Silverlight (Even though I am not sure how open Mac and Linux users are to an Microsoft technology)&lt;br /&gt;&lt;br /&gt;3. In game UI can be greatly simplified by using the Silverlight controls but at the same time have the flexibility to "skin" the UI to make it look more exciting in a game environment&lt;br /&gt;&lt;br /&gt;4. Making the game experience more social by integrating with social networking sites(like Facebook connect) is much easier with Silverlight game delivered on the web. This opens an entirely new avenue to explore.&lt;br /&gt;&lt;br /&gt;5. Containing piracy on PC would be easier with Silverlight than XNA (Or so I hope. Theoretically it would be possible to get the Silverlight code and find a way to hack it and run it offline)&lt;br /&gt;&lt;br /&gt;6. Delivering the game solely through the web also opens interesting monetizing options.&lt;br /&gt;&lt;br /&gt;7. The Roadmap for Silverlight with Silverlight 3.0 and beyond like &lt;a href="http://wildermuth.com/2009/03/18/Enabling_Out-of-Browser_Support_in_Silverlight_3"&gt;Out of Browser experience&lt;/a&gt; and &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/11/16/update-on-silverlight-2-and-a-glimpse-of-silverlight-3.aspx"&gt;GPU accelerated graphics &lt;/a&gt;is quite exciting.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So there it is. I've decided to use Silverlight for my adventure game.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;An intersting side effect of chosing Silverlight is that I started to increasingly consider Vector Graphics for my game instead of raster graphics since WPF/Silverlight 2D API is more vector graphics based. The main advantage in my mind is cleanly scalable graphics and resolution independant games (Consider playing a silverlight game full screen. Scaling pixel graphics would make it blocky or too fuzzy after filtering to avoid blockiness). I have looked at using the cool and free tool &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; for SVG graphics that can be converted to XAML and used from Silverlight(More on this in a later post)&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Flash?&lt;/strong&gt;&lt;br /&gt;People might ask me why I didn't consider Flash at this point. It has all the advantages of Silverlight as well as much wider adoption across machines and platforms. The main reason is I like the productivity I get on the .NET platform over ActionScript or whatever new environment I have to get used to.&lt;br /&gt;&lt;br /&gt;Also the installation of Silverlight on Windows takes less than 20 seconds and I don't think that should be a big barrier if the game turns out to be good after all. (I am not sure of the experience on the Mac and Linux but something I will be looking into).&lt;br /&gt;&lt;br /&gt;And again the &lt;a href="http://silverlight.net/learn/mobile.aspx"&gt;roadmap&lt;/a&gt;/&lt;a href="http://wmpoweruser.com/?p=4628"&gt;rumors &lt;/a&gt;on Silverlight on Mobile platforms(and &lt;a href="http://stevesmithblog.com/blog/silverlight-3-on-xbox-360/"&gt;Xbox360&lt;/a&gt;?) makes me think Silverlight might not be bad after all in the longer run.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;iPhone?&lt;/strong&gt;&lt;br /&gt;Everyone wants to get their game onto the iPhone. It seems to be becoming the defacto mobile gaming platform that is open enough to be easily developed for. At this point I am going to concentrate my efforts on the broader PC base and probably revisit iPhone development at a much later time(once my game is successful?). For now I am just making sure I am not basing any of my game data directly dependant on Silverlight(like using XAML) so that it can be more easily ported to other platforms. Who knows? &lt;a href="http://www.infoworld.com/d/developer-world/silverlight-iphone-next-not-quite-says-ballmer-035"&gt;Silverlight might be ported to iPhone even&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So that's it. I have decided on the game to be built and therefore the technology to use based on my target platform.&lt;br /&gt;&lt;br /&gt;This post has become much longer than I anticipated. Please feel free to post your comments here if you disagree(or agree) with me on any of the above things.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update(July 10th, 2009) : &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3 has been released&lt;/a&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-72608833522624359?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/72608833522624359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/07/silverlight-for-games.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/72608833522624359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/72608833522624359'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/07/silverlight-for-games.html' title='Silverlight for games'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-3436033465140741979</id><published>2009-07-07T12:41:00.000-07:00</published><updated>2009-07-08T21:15:40.663-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><title type='text'>Why get into Indie game development? (or Why Not)</title><content type='html'>This is not the first question I asked myself when I thought of making games and I suspect it's the same with so many of you thinking of getting into it.&lt;br /&gt;&lt;br /&gt;But I think it's an important question to ask early. Again I haven't done anything at this point and so I am not trying to give advice or answer any questions. Just putting down my thoughts here.&lt;br /&gt;&lt;br /&gt;For me the "Why Not?" question is the easier one to list. It follows logic more. "Why?" is probably more emotional (This is turning out to be a recurring issue in my life - "Do I want to go back to India?"). And by putting them down it should be perfectly clear to anyone why you should *&lt;strong&gt;not* &lt;/strong&gt;get into independent game development.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why Not?&lt;/strong&gt;&lt;br /&gt;1. I already have a good paying job which takes a lot of my energy&lt;br /&gt;2. The game market is saturated with too many games - high budget and independent&lt;br /&gt;3. Because of 2) the money you can make in games is low and way less than what I currently make in my job&lt;br /&gt;4. The chance of failure is lot more than success&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why?&lt;/strong&gt;&lt;br /&gt;1. Because I really want to make games (if not, just stop right here)&lt;br /&gt;2. I am my own boss. I decide and control the outcome(at least I feel I do)&lt;br /&gt;3. Satisfaction with work is high. Work is no longer a bad word (is that good for my personal life though?)&lt;br /&gt;4. Applying creative ideas at levels unprecedented in my current job&lt;br /&gt;&lt;br /&gt;At this point my friends might tell me - "You should join a start up". Some of them are in one and they seem to get 3), 4) and some of 2).&lt;br /&gt;&lt;br /&gt;But I guess it all finally boils down to 1) - Why do you want to make games? This is where things cannot be put down on paper. At this point I am probably comparing myself to an artist who likes the art. But then there is this extra thorn in my subconcious - I am not even sure I am good at the art.&lt;br /&gt;&lt;br /&gt;I am not sure of any of these things and it is this uncertainity which leads me to treat it like an adventure. And I could just stop it all one day and go back to my cozy life - Forget I even went on an adventure. Which is where I hope this writing will help me - Not to put down some memories but to remind myself that there is no turning back now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-3436033465140741979?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/3436033465140741979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/07/why-get-into-indie-game-development-or.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3436033465140741979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/3436033465140741979'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/07/why-get-into-indie-game-development-or.html' title='Why get into Indie game development? (or Why Not)'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7968606659605866343.post-8232901400377509007</id><published>2009-07-05T23:13:00.000-07:00</published><updated>2009-07-06T01:08:17.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Indie Indian'/><category scheme='http://www.blogger.com/atom/ns#' term='Announcement'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Tech'/><title type='text'>Why this blog</title><content type='html'>I am setting up this blog so that I can chronicle and share out my experiences in trying to become an independent game developer.&lt;br /&gt;&lt;br /&gt;Right here is step 1.&lt;br /&gt;&lt;br /&gt;The other purpose of this blog is to share out information on specific &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-corrected"&gt;technologies&lt;/span&gt;/ideas that I have been playing with in creating my games - Aggregation of information I found on the web or things about which I haven't found enough information on the web where I would like to fill the gaps in.&lt;br /&gt;&lt;br /&gt;Also my hope is that this blog would be a place where I would announce progress and completion of my games and the lessons I learnt on the way.&lt;br /&gt;&lt;br /&gt;And finally the name of my blog &lt;strong&gt;"indie-&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;indian&lt;/span&gt;"&lt;/strong&gt; - Is to probably just identify myself with the sub-minority group that I am in - The Indian independent game developer. Maybe there will be some posts on this, trying to reach out and connect with others in this group. Maybe if I become successful I can get more people into this group...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7968606659605866343-8232901400377509007?l=indie-indian.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://indie-indian.blogspot.com/feeds/8232901400377509007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://indie-indian.blogspot.com/2009/07/why-this-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/8232901400377509007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7968606659605866343/posts/default/8232901400377509007'/><link rel='alternate' type='text/html' href='http://indie-indian.blogspot.com/2009/07/why-this-blog.html' title='Why this blog'/><author><name>Vikram</name><uri>http://www.blogger.com/profile/15599894556739103705</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
