<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-820900053882208250</atom:id><lastBuildDate>Mon, 07 Oct 2024 05:49:41 +0000</lastBuildDate><title>Fancygames Dev Blog: Behind the screen</title><description></description><link>http://devblog.fancygames.net/</link><managingEditor>noreply@blogger.com (Unknown)</managingEditor><generator>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-820900053882208250.post-3706087294699315053</guid><pubDate>Sun, 06 Nov 2011 22:53:00 +0000</pubDate><atom:updated>2011-11-06T14:53:18.090-08:00</atom:updated><title>Using Google Docs in game development</title><description>Our team is geographically spread: development, game design and graphical design are all done in different places and at different time. What helps us to keep game balance under control is Google Docs which saved us tons of time. Sometimes we involve external people to help us with little things and it would be too much to ask them to install version control software or use proprietary tools if we want them to do a quick review and let them fix balance easily. However, everyone knows how to use spreadsheets, and this is where Google Docs comes in.&lt;br /&gt;
&lt;br /&gt;
What usually is stored in Google Docs is balance of the game - that can be either general settings (for example, power of certain objects and tools, delays for number of actions, etc) or entire system of levels can be stored and adjusted in a Spreadsheet. Just as example, you can imagine Tower Defence type of game which has sequence of predefined waves and each wave will be a line in spreadsheet with values like duration of the wave, number of enemies of type 1, type 2, etc.&lt;br /&gt;
&lt;br /&gt;
The next step is to integrate your game with Google Docs, which is apparently very very simple. Any spreadsheet can be published on the web in different formats such as CSV, XML, plain text and others.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhst7Oxw3-h71SW7w2CpK5Vlks4gY_75az9gi9armEmzzl_bpu6lLPRJPcBFNOyjmvRBZLDp4SY3I0hYHIF2pLAP6i4D09j0Z4_ZUs2RsuAITcaWWlW9DrUylTCf6wOX4HSXGYYxhjsV3E/s1600/Google+Docs+-+Publish+to+the+web.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhst7Oxw3-h71SW7w2CpK5Vlks4gY_75az9gi9armEmzzl_bpu6lLPRJPcBFNOyjmvRBZLDp4SY3I0hYHIF2pLAP6i4D09j0Z4_ZUs2RsuAITcaWWlW9DrUylTCf6wOX4HSXGYYxhjsV3E/s1600/Google+Docs+-+Publish+to+the+web.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
We usually use CSV file, which can be stored in your game data as it is or transformed in more convenient format, for example, serialised to plist.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3QO_B5ljZqYm7cIaj-Von8Y6cW1rPw6WgClrfMkrb0jeG-sgCDcR0TnQYErNKCgMUHnRZSl4pMM8t4xFc-hd5vUEIGUIyJgIA6NMZHKpMezJWjkGj9Toot29Bb0wXOr5lpOv31hTAgK8/s1600/Google+Docs+-+Publish+Settings.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;313&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3QO_B5ljZqYm7cIaj-Von8Y6cW1rPw6WgClrfMkrb0jeG-sgCDcR0TnQYErNKCgMUHnRZSl4pMM8t4xFc-hd5vUEIGUIyJgIA6NMZHKpMezJWjkGj9Toot29Bb0wXOr5lpOv31hTAgK8/s320/Google+Docs+-+Publish+Settings.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
If you want very quick one-line solutions, you can just use [NSString stringWithContentsOfURL:], but bear in mind that it is synchronous connection (can be used with GCD). After that you will need to find a CSV parser (&lt;a href=&quot;http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data&quot;&gt;have a look here&lt;/a&gt;&amp;nbsp;or &lt;a href=&quot;https://github.com/davedelong/CHCSVParser&quot;&gt;here&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
If you have button in your game which can download the latest data from Google Docs and store it in the app files (to be loaded on next launch), you will get very simple solution with the following features:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The game settings can be tweaked at any time with immediate result without changing and recompiling source code&lt;/li&gt;
&lt;li&gt;You can share access to the spreadsheet with different people&lt;/li&gt;
&lt;li&gt;Google Docs keeps track of all changes and you have version control for the settings&lt;/li&gt;
&lt;li&gt;You can make changes from any computer or even a mobile phone. All you need is a web browser.&lt;/li&gt;
&lt;/ol&gt;</description><link>http://devblog.fancygames.net/2011/11/using-google-docs-in-game-development.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhst7Oxw3-h71SW7w2CpK5Vlks4gY_75az9gi9armEmzzl_bpu6lLPRJPcBFNOyjmvRBZLDp4SY3I0hYHIF2pLAP6i4D09j0Z4_ZUs2RsuAITcaWWlW9DrUylTCf6wOX4HSXGYYxhjsV3E/s72-c/Google+Docs+-+Publish+to+the+web.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-820900053882208250.post-1591378296918223701</guid><pubDate>Fri, 28 Oct 2011 21:28:00 +0000</pubDate><atom:updated>2011-11-06T14:44:47.814-08:00</atom:updated><title>Technical side of Yumm 2.0</title><description>The first version of Yumm was very simple and the whole implementation from idea to release took just a few weeks. However, trying to get good quality pictures and smooth animations, the size of the app was not very small.&lt;br /&gt;
&lt;br /&gt;
Idea of adding new characters came shortly after seeing how people liked Yumm. Although, having the same foundation as in the original version of Yumm would that every new character should have come with update and increasing by 15-20 Mb in size. That doesn&#39;t seem fair, especially, for people who are not going to use these new characters. The decision was made to go with building flexible platform where you can download and run new characters.&lt;br /&gt;
&lt;br /&gt;
It took time to design and implement the solution, and I am sure that we won&#39;t regret investing so much time and effort in it. The most valuable advantages:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Yumm 2.0 supports downloading and running any characters with custom graphics, sounds and even logic. This means that we can add a new character without updating our main app.&lt;/li&gt;
&lt;li&gt;It also supports delta updates for the characters. Adding new animations or fixing bugs will come to users in small packages.&lt;/li&gt;
&lt;li&gt;Graphics and animations can be tailored for specific devices. This will be particularly useful for tackling Android fragmentation.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;Another challenge was to make the application network friendly, as size of each character is 10-20 Mb. Apple did a great sessions on &lt;a href=&quot;http://developer.apple.com/videos/wwdc/2010/&quot;&gt;WWDC&#39;10&lt;/a&gt;&amp;nbsp;(Sessions 207 and 208)&amp;nbsp;for developing network-friendly applications and I strongly recommend to familiarise with it if you use network connections.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qMvpkahDKGAeHZw_zfDra_5tblm1aPPuBzx8MkKvifwYwZeQ8vxQea9UBqLVxUHwd_d_kxb-1o1KhMRoa_pUgyVxH2Bf3mjN3Rb-QCEe6-hoxsYH-d3NuY5AjRJUbcPew7e6YSLUh_4/s1600/Yumm2.0-Downloading+character.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qMvpkahDKGAeHZw_zfDra_5tblm1aPPuBzx8MkKvifwYwZeQ8vxQea9UBqLVxUHwd_d_kxb-1o1KhMRoa_pUgyVxH2Bf3mjN3Rb-QCEe6-hoxsYH-d3NuY5AjRJUbcPew7e6YSLUh_4/s1600/Yumm2.0-Downloading+character.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Essential problems that had to be solved:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Support interruption of downloads and resuming downloading.&lt;/li&gt;
&lt;li&gt;Background downloads&lt;/li&gt;
&lt;li&gt;Error handling and handling corrupted data&lt;/li&gt;
&lt;li&gt;Awareness of connectivity status&lt;/li&gt;
&lt;li&gt;Asynchronous connections and non-blocking user interface&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;a href=&quot;http://allseeing-i.com/ASIHTTPRequest/&quot;&gt;ASIHTTPRequest&lt;/a&gt; library was used for the networking, although, it was recently announced that it&#39;s not going to be supported anymore. The library provides support for resuming downloads and background tasks, however, a few twists has to be done to make sure that resuming doesn&#39;t corrupt the downloaded data in case if file has been changed or network responds with a HTML page that can be a login page for a Wi-Fi hotspot or temporary network/server error.&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</description><link>http://devblog.fancygames.net/2011/10/technical-side-of-yumm-20.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3qMvpkahDKGAeHZw_zfDra_5tblm1aPPuBzx8MkKvifwYwZeQ8vxQea9UBqLVxUHwd_d_kxb-1o1KhMRoa_pUgyVxH2Bf3mjN3Rb-QCEe6-hoxsYH-d3NuY5AjRJUbcPew7e6YSLUh_4/s72-c/Yumm2.0-Downloading+character.png" height="72" width="72"/><thr:total>0</thr:total></item></channel></rss>