Appstore Blogs Appstore DeveloperBlog /blogs/appstore/feed/entries/atom 2017-11-17T22:08:44+00:00 Apache Roller /blogs/appstore/post/c87bc808-f4dd-46c0-a37d-123f5b5428ce/three-holiday-trends-the-best-times-for-app-revenue-and-downloads Three Holiday Trends: The Best Times for App Revenue and Downloads Emily Esposito Fulkerson 2017-11-16T22:45:40+00:00 2017-11-16T23:17:45+00:00 <p><img alt="AMZ_AppStore_BlogBanners_Nov17_v1_111417_728x280.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Newzoo/AMZ_AppStore_BlogBanners_Nov17_v1_111417_728x280._CB494480677_.png?t=true" style="display:block; height:280px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>What is the best time for app revenue? When do game downloads surge? We worked with <a href="https://newzoo.com/" target="_blank">Newzoo</a>&nbsp;to analyze app revenue and downloads in 2016, and identified peak times of the year. Read about&nbsp;three of the top trends we uncovered.</p> <p><img alt="AMZ_AppStore_BlogBanners_Nov17_v1_111417_728x280.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Newzoo/AMZ_AppStore_BlogBanners_Nov17_v1_111417_728x280._CB494480677_.png?t=true" style="display:block; height:280px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>There’s a good and bad time to do just about everything. Want to set yourself up for success in the new year? Start working towards your goals on <a href="https://www.psychologicalscience.org/news/minds-business/why-monday-is-the-best-day-for-setting-new-goals.html" target="_blank">Mondays</a>. Want to email your customers? Try sending on <a href="https://coschedule.com/blog/best-time-to-send-email/" target="_blank">Tuesday</a>.</p> <p>But, what is the best time for app revenue? When do game downloads surge?</p> <p>We worked with <a href="https://newzoo.com/" target="_blank">Newzoo</a>&nbsp;to analyze app revenue and downloads in 2016, and identified peak times of the year. Here are three of the top trends we uncovered:</p> <h1>1. November 26 was the best day for app revenue in 2016</h1> <p>&nbsp;</p> <p><img alt="111617_HolidayTrends_1.1.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Newzoo/111617_HolidayTrends_1.1._CB494435025_.png?t=true" style="display:block; height:284px; margin-left:auto; margin-right:auto; width:728px" /><br /> Just one day after Black Friday, app revenue spiked, making it the top performing day of the whole year. With some extra free time and deep discounts on devices, people were eager to play with their new phones and tablets.</p> <p>While November 26 was the best day for app revenue, the whole month of November also saw an increase, with 26% higher revenue than the&nbsp;average month in 2016.</p> <h1>2. Game downloads in December surged 17.2% compared to November<br /> <br /> <br /> <img alt="111617_HolidayTrends_2.1.PNG" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Newzoo/111617_HolidayTrends_2.1._CB494428953_.png?t=true" style="display:block; height:301px; margin-left:auto; margin-right:auto; width:728px" /></h1> <p>December was a strong month in terms of app downloads, with a 13.9% increase compared to the average month in 2016. Game downloads particularly spiked in December, with a 17.2% increase when compared to November and accounting for 9.6% of all game downloads on iOS and Android in 2016.</p> <p>Perhaps most importantly, if you are a game developer: make sure you have your app submitted and published by Christmas. Last year, December 25 was the best day for game downloads.</p> <h1>3. Momentum continues into January<br /> <br /> &nbsp;</h1> <p><img alt="111617_HolidayTrends_3.1.PNG" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Newzoo/111617_HolidayTrends_3.1._CB494428954_.png?t=true" style="display:block; height:257px; margin-left:auto; margin-right:auto; width:728px" />The fun doesn’t stop in the new year. App revenue and downloads were still higher than normal in January 2017, with apps and games generating 15% more revenue in January than the average monthly revenue in 2016.</p> <p>Downloads were similarly high in January compared to December, with game downloads even increasing 1.2%.&nbsp;</p> <h1>Maximize the holidays and submit your apps now</h1> <p>Submit your apps in time for the holiday rush – it’s easy. Eighty-five percent of submitted apps just work when you submit them to the Amazon Appstore, no additional modifications needed.</p> <p><a href="https://developer.amazon.com/why-amazon">Register for a free Amazon developer account</a><br /> <a href="https://developer.amazon.com/app-testing-service">Test your app and get feedback in 90 seconds or less</a><br /> <a href="https://developer.amazon.com/app-submission">Submit your app</a></p> <p>&nbsp;</p> /blogs/appstore/post/fcd41722-7447-4cd3-bf46-3b614345b5f8/new-feature-in-app-purchase-batch-submission New Feature: In-App Purchase Batch Submission Becky Young 2017-11-16T18:14:51+00:00 2017-11-17T19:26:34+00:00 <p style="text-align:center"><img alt="" src="https://m.media-amazon.com/images/G/01/appstore/111617_IAPBatchBanner._CB494901095_.jpg" style="height:400px; width:750px" /></p> <p>In-app purchasing (IAP) is the predominant method for selling products within apps. You have been asking us to provide an option to submit IAPs in batches and Amazon is delivering it today.</p> <p style="text-align:center"><img alt="" src="https://m.media-amazon.com/images/G/01/appstore/111617_IAPBatchBanner._CB494901095_.jpg" style="height:400px; width:750px" /></p> <p style="text-align:justify">In-app purchasing (IAP) is the predominant method for selling products within apps. You have been asking us to provide an option to submit IAPs in batches and Amazon is delivering it today. Now you will see a new option in the Amazon Developer Portal for IAP Batch Submissions.</p> <p style="text-align:justify">We know how important IAP is for increasing app engagement and driving your bottom-line—<a href="https://www.statista.com/statistics/273120/share-of-worldwide-mobile-app-revenues-by-channel/">in 2017, 43 percent of mobile game revenues were generated through IAP</a>. We also know that managing multiple, sometimes 1000s of IAPs, can be tedious and time-consuming. Our new IAP Batch Submission feature allows you to upload your entitlements and consumables using a CSV file (with a file size of up to 12.5 MB), increasing the speed of submission and reducing unnecessary operational overhead.</p> <p style="text-align:justify"><strong>IAP management in minutes</strong></p> <p style="text-align:justify">It all starts with a CSV file. You can download the template for the CSV file <a href="https://s3.amazonaws.com/iap-data/Amazon_IAP_Upload_Template.csv">here</a>. If your app is also on the Google Play Store, export the Google In-app Products CSV file from the in-app products section of Google Play console. Next, you will need to make some minor tweaks to the Google CSV file for using within Amazon Appstore:</p> <ol> <li style="text-align:justify">Delete published date, purchase type, auto-translate, and pricing template ID columns.</li> <li style="text-align:justify">Add IAP type and Available By Date columns as the two last columns at the end.</li> <li style="text-align:justify">&nbsp;IAP type can be either entitlements or consumables.</li> <li style="text-align:justify">Available by Date is an optional field and needed only if you want the IAP to be made live on a future date.</li> </ol> <p style="text-align:justify">Note that the product ID is the same as the Amazon SKU.</p> <p style="text-align:justify">Next, head over the Amazon Developer Portal and navigate to “in-app items” section of your app on the Amazon Developer Portal.</p> <p style="text-align:center"><img alt="111617_IAPBatch.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/default/111617_IAPBatch._CB494900333_.png?t=true" style="height:435px; width:740px" /></p> <p style="text-align:justify">Click on import multiple IAPs using CSV. You will see a popup. Upload the CSV file. Upon upload, the system will check for any errors in formatting. If there are any errors, you can download the CSV file to review them and make any corrections. When you are ready, hit upload and submit.</p> <p style="text-align:center"><img alt="111617_IAPBatch2.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/default/111617_IAPBatch2._CB494900332_.png?t=true" /></p> <p style="text-align:justify">That’s all there is to it!</p> <p style="text-align:justify">You can find detailed instructions <a href="https://developer.amazon.com/docs/in-app-purchasing/iap-manage-bulk-items.html">here</a>.</p> <p style="text-align:justify"><strong>Not on the Amazon Appstore?</strong></p> <p style="text-align:justify">If IAP Batch Submission sounded easy, consider this stat: 85% of Android apps are compatible with the Amazon Appstore with no additional dev work required. Drop your APK into our <a href="https://developer.amazon.com/app-testing-service">compatibility testing tool</a> to find out if your app will work on Fire OS as is. It only takes 90 seconds.</p> /blogs/appstore/post/f392802e-8b65-411b-8264-57347b323a74/publish-gamemaker-studio-2-games-to-amazon-fire-part-2 Publish GameMaker Studio 2 Games to Amazon Fire (Part 2) Emily Esposito Fulkerson 2017-11-14T23:08:53+00:00 2017-11-16T18:53:05+00:00 <p><img alt="GMS2-newheader.jpg" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/GMS2-newheader._CB494897934_.jpg?t=true" style="display:block; height:382px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>In the second part of this series, we are going to explain how to compile a final executable as an APK file and upload it to the Amazon Appstore so you can make it available to the public.</p> <p><img alt="GMS2-newheader.jpg" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/GMS2-newheader._CB494897934_.jpg?t=true" style="display:block; height:382px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>In the <a href="https://developer.amazon.com/blogs/appstore/post/c70fb70f-bd42-41df-9813-b0b378ff2a7d/publish-gamemaker-studio-2-games-to-amazon-fire-part-1">previous tech blog</a>, we explained how to set up GameMaker Studio 2<em><strong> </strong></em>and the Amazon Fire target so that you could start testing your game projects on an Amazon Fire device. In this blog, we are going to explain how to compile a final executable as an APK file and upload it to the Amazon Appstore so you can make it available to the public.</p> <h1>Game options</h1> <p>Previously, we covered some of the <strong>Game Options</strong> within GameMaker Studio 2 in relation to setting the up the correct SDKs to test your game, but when it comes time to publish, you will need to set up all of the Game Options otherwise you won’t be able to publish correctly. We'll only run through the important parts of the Game Options for building the final game package, but you can find complete information for each section from the <a href="http://docs2.yoyogames.com/index.html?page=source%2F_build%2F2_interface%2F3_settings%2Fgame_options%2Foptions_amazon_fire.html" target="_blank">GameMaker Studio 2 manual</a>. To start with, let's look at the <strong>General Settings</strong>.</p> <h2>General options&nbsp;</h2> <p>The most important things to fill out here are the <strong>Product Information</strong> and the <strong>Build Settings</strong>. The product information will be used to define how the product will be identified on the store, and you should give it a <em>Display Name</em> (which will be used on the store and for the Icon name on devices), a <em>version number</em> (always greater than any previous version you may have uploaded), as well as a unique <em>Package Identifier</em>. The <em>Package Identifier</em> is a reverse-url format identifier that is normally configured as &quot;<em>com.&lt;CompanyName&gt;.&lt;GameName&gt;&quot;</em></p> <p><strong><em>IMPORTANT</em></strong><em>! This ID uniquely identifies your app on the device and on the Amazon Appstore. If you want to upload a new version of your app, the application ID (Package Identifier)&nbsp;</em><em>must be the same as the original APK that was uploaded. If you change the application ID, the store will treat the APK as a completely different app. So, once you publish your app, you should never change the application ID.</em></p> <div> <p>You can see in the example image below how this should all look:</p> <p><img alt="1114717_GameMakerFire_1.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_1._CB494160668_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /></p> <p>With the Product Information filled out, you should check the Build Settings next. If you've successfully been testing with a device, then you probably won't need to change these, since if it builds for testing, it should build for the final packaging. It's still a good idea to revise them and make sure that you are setting them correctly. In general, you always want to be on the latest build tools, support library, and SDK. You should note, however, that if you are using any extensions, you may need to bump the minimum SDK value up to whatever the Extension requires (check the documentation that comes with the extension).</p> <p><img alt="1114717_GameMakerFire_2.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_2._CB494160670_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /></p> <p>The rest of the game options deal with various other features like orientation and gamepad support that you should check and change as required by your game before moving on to set up the <strong>Graphics</strong>.</p> <h2>Graphics</h2> <p>The <strong>Graphics</strong> options will determine how your game displays and looks like this:</p> <p><img alt="1114717_GameMakerFire_3.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_3._CB494160665_.png?t=true" style="display:block; height:401px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Important things to check here are the <em>Screen Colour Depth</em> and <em>Texture Page</em> options. With screen colour depth, if you choose 24bit, then your gradients and glows will be much smoother and subtle with less &quot;banding,&quot;&nbsp;but it comes with a cost as it will also impact performance and it's still not the most used color depth. This does not mean that your project won't run on a device with 16bit color display, it will, but it may mean it's using extra resources for no gain.</p> <p>For the texture page size, again, there is no strict rule for this, but you are probably better choosing a smaller size than a larger size&nbsp;to ensure compatibility with older Fire devices (if in doubt, simply leave it at 1024x1024). However, choosing too small a size may impact performance as it can increase the texture swaps required, but too large a size may mean that your graphics get distorted on devices that have less vRam and so the texture is scaled down to fit in memory and then scaled back up to be drawn.</p> <h2>Icons and images</h2> <p>The <strong>Icons and Images</strong> sections of the Amazon Fire Game options are where you set the different promotional images that your game will use on the Amazon Appstore. Each image should be authored as a PNG file and set to the size given, and they will be used as promotional Icons, as well as on-screen icons and splash screens when your game has been installed on the end user’s device.</p> <h2>Permissions&nbsp;</h2> <p>In most cases, you should not have to change anything shown on the <strong>Permissions</strong> section of the Game Options. These should be set automatically for you when using GameMaker Studio 2 functions, but if you are using any third party extensions then you may have to select a permission manually. See the documentation that comes with the extension for more details.</p> <h1>Compiling your game</h1> <p>Once you have the Game Options correctly set up, you are ready to compile your game as an APK for uploading to the Amazon Appstore. You can compile the game using either the VM or YYC options, although we recommend that final executables always use the YYC as it can give an important boost to performance. Note that the YYC may take longer to compile than the VM.</p> <p>When you click the compile button, you will be prompted to select a location to save the final APK to, and once selected, the compilation of your game will begin. The compile process may need to connect to the Internet to download additional files and tools, which in turn may prompt a firewall alert - if this happens you should allow the connection, otherwise the build will fail.</p> <p>Once the game has finished compiling, GameMaker Studio 2 will open an Explorer window on the created APK by default (although this can be changed in the Preferences), ready for you to upload.</p> <h1>Setting up the Amazon store</h1> <p>With all the work in GameMaker Studio 2 done, it’s time to go over to the <a href="https://developer.amazon.com/home.html">Amazon Developer</a> dashboard and create a new app listing for your game. After signing in, you need to go to the main &quot;<em>Home</em>&quot; screen where you can see the latest announcements and the &quot;<em>Dashboard</em>&quot; for your uploaded apps (empty just now!). Click on the <strong>Add a New App</strong> button to get started:</p> <p><img alt="1114717_GameMakerFire_4.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_4._CB494160667_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /></p> <p>You will be asked what kind of app you are wanting to add, and this can be either:</p> <ul> <li>Android</li> <li>Mobile Web</li> <li>PC &amp; Mac</li> </ul> <p>In this case you want to select <strong>Android</strong>. This will then take you to the main submissions page where you need to fill in the basic details for the submission:</p> <p><img alt="1114717_GameMakerFire_6.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_6._CB494160661_.png?t=true" style="display:block; height:545px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>This tab deals with the basic information for your app. The following fields must be filled in:</p> <ul> <li><strong>App title</strong>: The display name for your app (obligatory).</li> <li><strong>App SKU</strong>: The SKU is a unique identifier that must be added to identify your app. The SKU always follows the reverse URL format of <em>com.companyname.appname</em>, for example &quot;<em>com.mcsweeneygames.catchthehaggis,&quot;</em>&nbsp;and all characters must be lowercase. This should match the <strong>Package Details</strong> that you gave in the GameMaker Studio<em> 2</em> Game Options.</li> <li><strong>Category</strong>: The app category that you want to use to broadly define your app. Select the most appropriate from the list. You may also be given the option to add Category Refinements based on the choice you make to further narrow down the definition.</li> <li><strong>Customer support contact</strong>: Checking the box marked &quot;<em>Use my default support information</em>&quot; will tell Amazon to use the default support email and URL that you supplied when registering, but if you wish to have something independent for each app, then you can un-check this which will then make the following options available:</li> <li><strong>Customer support email address</strong>: The email address where people can contact you for product support.</li> <li><strong>Customer support phone</strong>: A telephone number for support issues.</li> <li><strong>Customer support website</strong>: The website for support issues.</li> </ul> <p>Once you are happy with the details provided, click the Save button to continue. Should there be any problem with the information provided, the problem fields will be marked and you will be given an opportunity to resolve the issues.</p> <p>You will now be taken to the app overview screen where you can revise the information given and go through the checklist of actions before publishing:</p> <p><img alt="1114717_GameMakerFire_Ricochet.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_Ricochet._CB494171937_.png?t=true" style="display:block; height:732px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>We'll go through each of the sections of the checklist, but note that from this point on, you can leave the Amazon Developer Portal at any time and come back and continue where you left off. You also do not have to do each of the&nbsp;items in the order they are listed and can, for example, fill out the description then go back and fill in the pricing and availability later.</p> <h1>Availability and pricing</h1> <p><img alt="1114717_GameMakerFire_8.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_8._CB494160864_.png?t=true" style="display:block; height:333px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>This tab deals with the availability of your app, and the first thing you should do is select the country where you wish it to be sold. In general, you would leave this as &quot;All countries where Amazon sells apps,&quot;&nbsp;but if your app is <em>region-specific</em> then it may be that you want to choose the countries where it can be sold.</p> <p>After that, you can select to have your app listed as <em>free</em> or give it a price. Should you choose to give it a price, you will have to select a base currency and add the value in that currency to the field, then (when you click outside of the form) Amazon will automatically calculate an exchange for the other available currencies. If you are not happy with the values that Amazon gives, you can click the &quot;<em>I'll set my own prices</em>&quot; button and then edit the prices that have been set previously.</p> <p>Amazon requests that you also inform them of any other platforms that may have had the app released previously. If you click the <em>yes</em> button, you will be required to add a date for when the app was available. If you released the app on multiple platforms, you should add the date that it was originally released on the very first platform.</p> <p>The final option &quot;<em>When would you like publishing to start</em>&quot; is so you can add a launch date for your app. Note that your app will have to be accepted after final submission first and that this may take some time (a few days to a week usually), so make sure that the launch date takes this into consideration. Leave this blank if you have no special launch date requirements, in which case it will be published to the store as soon as it passes the submission process.</p> <p>When you are finished click <strong>Save</strong> and continue to the next tab.</p> <h1>Description</h1> <p><img alt="1114717_GameMakerFire_9.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_9._CB494160867_.png?t=true" style="display:block; height:524px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>As the name of the tab implies, here you must supply Amazon with all the written information to be associated with your app. This includes a short promotional description, a larger page description, and then some bullet&nbsp;points where you can list any outstanding features of your game. You can add some tags too, which will help when people search for an app from the Amazon store.</p> <p>When you are happy with the text, you can click on the Save button to continue, or you can click on the button labelled <strong>Save and add a translation</strong>. If you select the latter, your base text will be saved, but a new tab will open where you can select another language and supply Amazon with a translation of the original text. These translated texts will be shown on the region-specific Amazon Appstores.</p> <p>Once that’s done, don’t forget to click <strong>Save</strong> and continue.</p> <h1>Images and multimedia</h1> <p><img alt="1114717_GameMakerFire_10.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_10._CB494160893_.png?t=true" style="display:block; height:575px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>This section needs little explanation. It's where you add the promotional images for your app, and each section details the size and type of image that you should upload. You may even upload a video of your app, but note that if the file size is greater than 30MB you should use the FTP uploader (for more information, click the link that is supplied on the page.) Click <strong>Save</strong> when you are finished here.</p> <h1>Content ratings</h1> <p><img alt="1114717_GameMakerFire_11.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_11._CB494160895_.png?t=true" style="display:block; height:538px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Giving your game appropriate content ratings is incredibly important as, if you fail to supply the correct ones, your app could be pulled from the store or your submission could fail. Basically, these ratings are used by Amazon to &quot;target&quot; your app at a given public audience and so you should try to be as precise as possible, since you do not want your beautifully crafted children’s puzzler to be aimed at an 18+ audience only!</p> <p>When you have selected the appropriate ratings for your app, you should also click on any of the extra warnings that your app may contain gambling, advertisements etc. Click on the <strong>Save</strong> button when you are done.</p> <h1>Binary files</h1> <p><img alt="updated-111417_image.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/updated-111417_image._CB494424415_.png?t=true" style="display:block; height:739px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>This tab is for uploading your <em>*.apk</em> file and setting the necessary permissions and support options. Below are listed each of the options with a brief explanation of what they are for:</p> <ul> <li><strong>Apply Amazon DRM?</strong>: For each app that you submit to Amazon, you can choose to apply DRM or make your app available without any rights management constraints. However, GameMaker Studio 2 does not currently have the necessary options to permit this, so you <em>must select <strong>No</strong></em>.</li> <li><strong>App Store Certificate Hashes</strong>: There is nothing here for you to change, and this section is purely informative as it shows all the different security hashes that are generated by Amazon to be used instead of your Amazon developer account details.</li> <li><strong>Binary File</strong>: Click here and browse to the created <em>*.apk</em> file to upload your app to Amazon. This can take a few minutes, during which you will not be able to continue, so be patient! Note that you can also choose to use the FTP uploader should your app file be larger than 30MB, and once the file has been uploaded, you can check the manifest to see that everything is in order.</li> <li><strong>Device Support</strong>: Generally, you can leave all these options checked, but if your app is designed specifically for phones and/or has a low resolution (800 x 480 or less), then you may wish to disable the Kindle Fire HD.</li> <li><strong>Language Support</strong>: This section is for informing users of the languages that your app supports, so if you have more than one language option in your game, you should tick it here.</li> <li><strong>Export Compliance</strong>: This is a legal formality that is required by Amazon since it is&nbsp;an American company. Failure to tick this will mean that your app cannot be submitted.</li> <li><strong>Use Amazon Maps Redirection</strong>: This only needs to be checked if you are using Google Maps in any capacity (from an extension) as it will redirect the extension function calls to use the Amazon Maps API instead of the Google Maps one.</li> <li><strong>Binary Alias</strong>: This is the unique name that you give the uploaded <em>*.apk</em> file. It can be useful to distinguish between different versions of the same game (should you wish to have an HD version and a normal version, for example). In general, if you do not plan to have multiple versions, you can use the same identifier here as the SKU code entered in the General Information tab and GameMaker Studio 2 Game Options.</li> <li><strong>Testing instructions</strong>: This text box is for you (the developer) to leave messages relating to specific functions and devices that your game should be tested on. Initially, you should not need to use this, but if your app is not permitted or its&nbsp;submission is marked as &quot;pending,&quot;&nbsp;then you have should receive an email outlining the issues found. In these cases, you would fix the issues and re-upload the <em>*.apk</em>, then fill in this section with the specific information for testing to see that the problem has been resolved. For example - &quot;<em>Please test specifically on Kindle Fire. This is a built-in response to issues described in your test report: Use of the Settings Soft Keys (Top menu bar such as volume, device options, etc) causes the app to exit.</em>&quot;</li> </ul> <p>With all that filled out correctly, you can now press <strong>Save</strong> to store the information.</p> <h1>Submitting your app</h1> <p>If all is correct, you should see the tabs each have a green tick on them at the top of the screen:</p> <p><img alt="1114717_GameMakerFire_13.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_13._CB494160845_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" />It is very important to review everything carefully at this point, as you can still edit all the information that you have provided. Once you submit the app for approval, this will no longer be the case, so better get it right the first time. Once you have reviewed everything and are happy with the information provided, hit the <strong>Submit</strong> button!</p> <p><img alt="1114717_GameMakerFire_14.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/1114717_GameMakerFire_14._CB494160847_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /></p> <h1>The approval process&nbsp;</h1> <p>Your app could take some time to get approved (usually a few days, but it can take longer), and the main dashboard of your developer account will show the status of the app at every stage. Each of the different messages informing you of the app status are listed below:</p> <ul> <li><strong>Submitted</strong>: The app has been submitted for review, and it can no longer be edited. At this time, you can cancel the request for review and continue to edit your app.</li> <li><strong>Under Review</strong>: The app is being reviewed by Amazon and can no longer be edited.</li> <li><strong>Approved</strong>: The app has completed at least one stage of the testing and content review process. It may soon be ready for publication at Amazon.</li> <li><strong>Live</strong>: The app is now live on the store.</li> <li><strong>Pending</strong>: When the app is in this status, you will receive an e-mail from our team explaining why the review process for your app was paused and asking you to perform some action. You must address the relevant metadata or binary issues before your app can successfully continue through the process.</li> <li><strong>Rejected</strong>: The app has not passed the review process. You will receive an e-mail from Amazon explaining the reasons for the failed approval.</li> </ul> <p>Once this process is complete, your app will either be live on the store or require some further action from you to fix an issue that has been found. If there is an issue, then the Amazon team will inform you of it and explain what needs to be done to fix it. If the app is <em>Live</em> then congratulations! Your game can now be bought, downloaded, and enjoyed by the millions of Amazon users from the Appstore!</p> <h1>&nbsp;</h1> </div> /blogs/appstore/post/c29fd3d1-27f7-46e3-8414-74ed591d7310/week-in-review-november-13-2017 Week in Review - November 13, 2017 Serena McIntire 2017-11-14T01:47:19+00:00 2017-11-14T01:47:19+00:00 <p style="text-align:center"><img alt="lifestyle-laptop-WIR-3.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/LifestyleImages/lifestyle-laptop-WIR-3._CB505371676_.png?t=true" /></p> <p>Have you been too busy this fall to keep up with us at the Amazon Appstore? We've been busy too, from discussing how to work with source code in GameMaker with guest blogger Alejandro Hitti to releasing our all-new Amazon Appstore for Android. Here's what you missed.</p> <p style="text-align:center"><img alt="lifestyle-laptop-WIR-3.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/LifestyleImages/lifestyle-laptop-WIR-3._CB505371676_.png?t=true" /></p> <p>Have you been too busy this fall to keep up with us at the Amazon Appstore? We've been busy too, from discussing how to work with source code in GameMaker with guest blogger Alejandro Hitti to releasing our all-new Amazon Appstore for Android. Here's what you missed:</p> <blockquote> <h2><a href="https://developer.amazon.com/blogs/appstore/post/68763da0-8cdc-4f4a-825f-38eeb5c97504/introducing-gamemaker-studio-2-support-for-fire-os">Introducing GameMaker Studio 2 Support for Fire OS</a></h2> <p>Appstore is excited to announce the continued support for Fire OS in YoYo Game’s GameMaker Studio, with the launch of the <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">all-new Amazon Fire edition for GameMaker Studio 2 (GMS2)</a>. Now developers can create and publish Amazon Appstore games directly from the GameMaker IDE. <a href="https://developer.amazon.com/blogs/appstore/post/c70fb70f-bd42-41df-9813-b0b378ff2a7d/publish-gamemaker-studio-2-games-to-amazon-fire-part-1" target="_blank">Here is a tutorial on setting up GameMaker 2 for Amazon Fire OS</a>.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/1b12eeff-c38c-4087-9b1b-b9727548adb4/gamemaker-developer-blog-series">GameMaker Blog Series: Written for Developer, by Developers</a></h2> <p>We are excited about the <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">all-new Amazon Fire edition for GameMaker Studio 2 (GMS2)</a>, letting developers create and publish Amazon Appstore games directly from the GameMaker IDE. To celebrate <a href="https://developer.amazon.com/blogs/appstore/post/68763da0-8cdc-4f4a-825f-38eeb5c97504/introducing-gamemaker-studio-2-support-for-fire-os">our partnership</a>, we have released a series of tutorials on developing&nbsp; with GameMaker.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/57a83cac-ea31-42c7-87c2-d68bb06e169e/introducing-the-all-new-amazon-appstore-for-android-devices">Introducing the All-New Amazon Appstore for Android Devices</a></h2> <p>We’re excited to announce the all-new standalone Amazon Appstore mobile app for Android. <a href="https://developer.amazon.com/blogs/appstore/post/57a83cac-ea31-42c7-87c2-d68bb06e169e/introducing-the-all-new-amazon-appstore-for-android-devices">The new mobile app</a> is redesigned from the ground up, allowing customers to enjoy the same apps and games that they engage with on Fire TV and Fire tablets on their mobile phones.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/74f005ac-79ee-4c04-a72f-94cefdde6ef8/the-all-new-amazon-fire-tv-with-4k-ultra-hd-and-hdr-now-shipping">The All-New Amazon Fire TV with 4K Ultra HD and HDR Now Shipping</a></h2> <p>Check your doorsteps, the all-new Amazon Fire TV is now shipping! <a href="https://developer.amazon.com/blogs/appstore/post/74f005ac-79ee-4c04-a72f-94cefdde6ef8/the-all-new-amazon-fire-tv-with-4k-ultra-hd-and-hdr-now-shipping">The all-new Amazon Fire TV</a> provides your app with the power it needs to perform its best and truly engage your customers.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/4c1f5215-17dd-4f4f-bc73-a8e0ed02252f/amazon-fire-tv-goes-worldwide-with-fire-tv-stick-basic-edition">Amazon Fire TV Goes Worldwide with Fire TV Stick Basic Edition</a></h2> <p>Now available to customers in more than 100 countries and territories, the <a href="https://developer.amazon.com/blogs/appstore/post/4c1f5215-17dd-4f4f-bc73-a8e0ed02252f/amazon-fire-tv-goes-worldwide-with-fire-tv-stick-basic-edition">Fire TV Stick Basic Edition</a> brings media streaming and the Amazon Fire TV experience to a global audience, including Canada, France, Italy, and Spain—and will be coming soon to Brazil and Mexico.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/a0d3d9db-719a-4c4f-b5f5-570751686c8f/new-look-for-the-amazon-developer-portal">New look for the Amazon Developer Portal!</a></h2> <p>We are <a href="https://developer.amazon.com/blogs/appstore/post/a0d3d9db-719a-4c4f-b5f5-570751686c8f/new-look-for-the-amazon-developer-portal">excited to launch</a> the redesign of the <a href="https://developer.amazon.com/">Amazon Developer Portal</a>, which improves the experience for developers as you engage with various resources on our website.</p> </blockquote> <p>Too busy to keep up with our blog? Don't worry, we've got you covered. Sign up to have our weekly summary sent directly to your inbox every week.</p> <p style="text-align:center"><a href="http://m.amazonappservices.com/blog-subscription?cmp=US_2017-00_ACH-Blog-Subscription&amp;ch=blg&amp;chlast=blg&amp;pub=blg&amp;publast=blg&amp;type=org&amp;typelast=org" target="_blank"><img alt="Blog_Subscribe_Button.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/default/Blog_Subscribe_Button._CB529593605_.png?t=true" /></a></p> /blogs/appstore/post/1b12eeff-c38c-4087-9b1b-b9727548adb4/gamemaker-developer-blog-series GameMaker Blog Series: Written for Developers, by Developers Serena McIntire 2017-11-14T01:38:16+00:00 2017-11-15T01:39:52+00:00 <p style="text-align:center"><img alt="animations.gif" src="https://lh3.googleusercontent.com/DGDEoM2HZcg4-u5fCaCmrtfYmHcp3pZ433Thkqu2Gno_K9xdCpKFn5TyOqVjZkWm6lMbdYKGc8iAUu0AnfhBNeCe4jmBTN4lWzs6opgip6MkpL4sIWzdVbPLBEhdhXiBpP7Yz-v9" style="-webkit-transform:rotate(0.00rad); border:none; height:360px; transform:rotate(0.00rad); width:640px" /></p> <p>We are excited about the <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">all-new Amazon Fire edition for GameMaker Studio 2 (GMS2)</a>, letting developers create and publish Amazon Appstore games directly from the GameMaker IDE. To celebrate <a href="https://developer.amazon.com/blogs/appstore/post/68763da0-8cdc-4f4a-825f-38eeb5c97504/introducing-gamemaker-studio-2-support-for-fire-os">our partnership</a>, we have released a series of tutorials on developing&nbsp; with GameMaker.</p> <p style="text-align:center"><img alt="animations.gif" src="https://lh3.googleusercontent.com/DGDEoM2HZcg4-u5fCaCmrtfYmHcp3pZ433Thkqu2Gno_K9xdCpKFn5TyOqVjZkWm6lMbdYKGc8iAUu0AnfhBNeCe4jmBTN4lWzs6opgip6MkpL4sIWzdVbPLBEhdhXiBpP7Yz-v9" style="-webkit-transform:rotate(0.00rad); border:none; height:360px; transform:rotate(0.00rad); width:640px" /></p> <p>We are excited about the <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">all-new Amazon Fire edition for GameMaker Studio 2 (GMS2)</a>, letting developers create and publish Amazon Appstore games directly from the GameMaker IDE. To celebrate <a href="https://developer.amazon.com/blogs/appstore/post/68763da0-8cdc-4f4a-825f-38eeb5c97504/introducing-gamemaker-studio-2-support-for-fire-os">our partnership</a>, we have released a series of tutorials on developing&nbsp; with GameMaker.</p> <h2>GameMaker Basics Tutorial Series</h2> <p>We partnered with Nathan Ranney, founder of the punk house game dev shop <a href="http://ratcasket.com/" target="_blank">RatCasket</a> and creator of <a href="http://blog.kerfuffle.io/" target="_blank">Kerfuffle</a>, to bring you the 4-part GameMaker Basics Tutorial Series:</p> <blockquote> <h2><a href="https://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">Drawing Sprites</a></h2> <p>In this first tutorial, Nathan covers the basics of <a href="https://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">developing with GameMaker</a>. This post covers setting up and animating sprites, which is basically an image that is being shown on your screen that can either be a single image or a series of images that form an animation. Nathan includes snippets of code for you to copy and use in your game.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">State Machines</a></h2> <p>Nathan returns to show you <a href="https://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">how to set up a simple state machine</a>, which is a data structure that keeps track of different states. For example, your game may have three states: “Game Running,” “Game Paused,” and “Game Over.” You might use a state machine to remember which one is active, and define how to transition from one to another. This blog contains lines of code that you can copy and paste, making it easy for you to build simple state machines for your games.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/65a8aa44-57b4-4990-85ae-0d491d589273/gamemaker-basics-juicing-your-movements">Juicing Your Movements</a></h2> <p>Nathan shows you how to <a href="https://developer.amazon.com/blogs/appstore/post/65a8aa44-57b4-4990-85ae-0d491d589273/gamemaker-basics-juicing-your-movements">add some juice to your character movements and animations</a>. This will help you squeeze more life and feeling out of your games, and improve overall game quality. You want to download<a href="http://drive.google.com/open?id=0B0G4emGoaxhEbFFkeE9LTlN1Skk" target="_blank"> this project file</a>, which contains some collision code that is not included in the blog. This post heavily relies on the teachings in the <a href="http://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">Drawing Sprites</a> and <a href="http://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">State Machines</a> blog posts, so we highly recommend that you read those before diving into this tutorial.</p> <h2><a href="https://developer.amazon.com/blogs/appstore/post/cc08d63b-2b7c-4dee-abb4-272b834d7c3a/gamemaker-basics-hitboxes-and-hurtboxes">Hitboxes and Hurtboxes</a></h2> <p>In Nathan's final GameMaker Basics tutorial, he shows you <a href="https://developer.amazon.com/blogs/appstore/post/cc08d63b-2b7c-4dee-abb4-272b834d7c3a/gamemaker-basics-hitboxes-and-hurtboxes">how to set up hitboxes and hurtboxes</a>. A hitbox is usually associated with some form of attack, and describes where that attack is effective. A hurtbox is usually associated with a character (or any other “hittable” object in your game). This tutorial is a little more complicated than the previous ones, and we highly recommend that you read up on <a href="http://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">Drawing Sprites</a>, <a href="http://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">State Machines</a>, and <a href="http://developer.amazon.com/blogs/appstore/post/65a8aa44-57b4-4990-85ae-0d491d589273/gamemaker-basics-juicing-your-movements">Juicing Your Movements</a> before diving in. As with the other posts in this series, there are code samples that are easy for you to copy and paste for your own use.</p> </blockquote> <h2>Source Control Tech Blog Series</h2> <p>We partnered with Alejandro Hitti, a videogame Programmer and Designer<em>&nbsp;from </em>Venezuela, to bring you these tutorials on source control. In this two-part blog series, <a href="https://developer.amazon.com/blogs/appstore/post/d7cfe367-188e-4c89-98b2-1cdeef0c34ab/git-started-with-source-control-and-gamemaker-studio-2-part-1">Alejandro will show you everything you need to work with source control,</a> specifically in GameMaker Studio 2.</p> <blockquote> <h2><a href="https://developer.amazon.com/blogs/appstore/post/d7cfe367-188e-4c89-98b2-1cdeef0c34ab/git-started-with-source-control-and-gamemaker-studio-2-part-1">Git Started with Source Control and GameMaker Studio 2 (Part 1)</a></h2> <p>Source control is an essential part of game development and one that every developer should use. In part 1, Alejandro goes over the following:</p> <ul> <li>Benefits of using source control and how to take advantage of it.</li> <li>Types of source control.</li> <li>Useful definitions when working with source control.</li> <li>Setting up a repository.</li> <li>Adding team members to repository.</li> <li>Integration and first commit.</li> <li>Pull, commit, merge, and push changes.</li> </ul> <h2><a href="https://developer.amazon.com/blogs/appstore/post/3e78a547-3ea4-459f-9131-43ae6e235892/git-started-with-source-control-and-gamemaker-studio-2-part-2">Git Started with Source Control and GameMaker Studio 2 (Part 2)</a></h2> <p>The second tutorial in this series goes over setting up source control in GameMaker Studio 2. If you haven't read part one yet, we suggest you do so by clicking <a href="https://developer.amazon.com/blogs/appstore/post/d7cfe367-188e-4c89-98b2-1cdeef0c34ab/git-started-with-source-control-and-gamemaker-studio-2-part-1">here</a>. In this post, we will cover how to deal with merge conflicts. The article is divided into the following sections:</p> <ul> <li>Quick reminder.</li> <li>Setting your diff/merge tool.</li> <li>Solving common merge conflicts.</li> <li>Reverting to a previous version.</li> <li>Useful external tools to consider.</li> </ul> </blockquote> <h2>Amazon Fire Tech Blog Series</h2> <p>I wrote this Amazon Fire Tech Blog Series to help you publish your GameMaker Studio 2 games to Amazon Fire devices.</p> <blockquote> <h2><a href="https://developer.amazon.com/blogs/appstore/post/c70fb70f-bd42-41df-9813-b0b378ff2a7d/publish-gamemaker-studio-2-games-to-amazon-fire-part-1">Publish GameMaker Studio 2 Games to Amazon Fire (Part 1)</a></h2> <p>In this tutorial, we will take you through setting up GameMaker Studio 2 and testing your game on an Amazon Fire device. In order to follow along with the tutorial, you should take a moment do set up the following items, or the steps outlined will not permit you to test, compile, or upload your game project correctly.</p> <ul> <li>A <strong>physical Amazon Fire device</strong> for testing your projects and connecting with GameMaker Studio 2. The device needs to have <a href="https://developer.amazon.com/public/resources/development-tools/ide-tools/tech-docs/05-setting-up-your-kindle-fire-tablet-for-testing#enabling-adb-on-your-fire-tablet">Developer Mode</a> activated and be discoverable using ADB.</li> <li>An <strong>Amazon Developer</strong> <strong>account</strong>. You can find out how to get one and set it up <a href="https://developer.amazon.com/why-amazon">here</a>.</li> <li>An <strong>Amazon Fire license</strong> for GameMaker Studio 2. You can get a licence for Amazon Fire through several different mechanisms which are <a href="http://help.yoyogames.com/hc/en-us/articles/115001410991-Getting-An-Amazon-Fire-Licence" target="_blank">outlined here</a> (note that there is a <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">60-day FREE trial available</a> for GameMaker right now).</li> </ul> <h2><a href="https://developer.amazon.com/blogs/appstore/post/f392802e-8b65-411b-8264-57347b323a74/publish-gamemaker-studio-2-games-to-amazon-fire-part-2">Publish GameMaker Studio 2 Games to Amazon Fire (Part 2)</a></h2> <p>In the <a href="https://developer.amazon.com/blogs/appstore/post/f392802e-8b65-411b-8264-57347b323a74/publish-gamemaker-studio-2-games-to-amazon-fire-part-2">second part of this series</a>, we to explain how to compile a final executable as an APK file and upload it to the Amazon Appstore so you can make it available to the public. If you have not done so before, you should take a moment do set up the items outlined in part 1 of the series (see above), including the Amazon Fire license for GameMaker Studio 2 (there is a <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">60-day FREE trial available</a> for GameMaker right now).</p> </blockquote> <p>I will continue to add to this list as we publish more GameMaker tutorials over the coming months.</p> <p>- Jesse Freeman (@jessefreeman)</p> /blogs/appstore/post/cc08d63b-2b7c-4dee-abb4-272b834d7c3a/gamemaker-basics-hitboxes-and-hurtboxes GameMaker Basics: Hitboxes and Hurtboxes Emily Esposito Fulkerson 2017-11-10T17:34:55+00:00 2017-11-14T22:22:25+00:00 <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_6.gif" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_6._CB493896013_.gif?t=true" /></p> <p>Welcome to the final GameMaker Basics entry! In this post, I'll cover hitboxes and hurtboxes.&nbsp;For example, how do they work? How do you set them up? How do you balance them? I thought this would be a great place to address questions like these.</p> <p>Welcome to the final GameMaker Basics entry! During the development of <a href="http://blog.kerfuffle.io/" target="_blank">Kerfuffle</a> (RIP), I got a lot of questions about hitboxes and hurtboxes. For example, how do they work? How do you set them up? How do you balance them? I thought this would be a great place to address questions like these. This entry is going to get a little more complicated than the previous entries, but this is nothing you can’t handle. As always, I highly recommend following along from the previous entries.</p> <p>Previous posts in this series:</p> <ol> <li><a href="https://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">GameMaker Basics: Drawing Sprites</a></li> <li><a href="https://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">GameMaker Basics: State Machines</a></li> <li><a href="https://developer.amazon.com/blogs/appstore/post/65a8aa44-57b4-4990-85ae-0d491d589273/gamemaker-basics-juicing-your-movements">GameMaker Basics: Juicing Your Movement</a></li> </ol> <h1>What are hitboxes and hurtboxes?</h1> <p>Essentially, hitboxes and hurtboxes are just specialized collision checks (collision checks allow you to determine when objects come in contact or overlap). A hitbox is usually associated with some form of attack, and describes where that attack is effective. A hurtbox is usually associated with a character (or any other “hittable” object in your game). Whenever the two collide, we consider the attack to have “landed” and we apply its effect on the target. I am going to be using fighting games as the main example for this entry. In my opinion, fighting games offer the clearest examples of hitboxes and hurtboxes, making them very easy to understand.</p> <p>Check out the example below from Ultra Street Fighter IV.</p> <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_1.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_1._CB493896035_.png?t=true" /></p> <p>Here we see Makoto performing one of her special moves, Fukiage. This is an upward-angled punch used as an anti-air attack, hitting an opponent that is jumping at you. The red rectangle is the hitbox of the attack, while the green rectangle is the hurtbox. If Makoto were to touch someone else's hurtbox with her hitbox, the other player would be “hit.”</p> <p>Now that your brain is melted from reading the word “box” a thousand times, let's get started with the setup.</p> <h1>Hurtbox setup</h1> <p>First things first! We need a sprite for our <strong>hurtbox</strong>. Create a new sprite, name it <strong>sprHurtbox</strong>, make it just a single pixel, and color it green. We only need a single pixel because we are going to scale it to whatever size we need whenever we instantiate a hurtbox. The alternative would be to create a custom-sized <strong>hurtbox</strong> sprite for every game object that might need one—tedious and wasteful.</p> <p>Now that you have your sprite, let's create the object. Create a new object, name it <strong>oHurtbox</strong>, and assign the <strong>sprHurtbox</strong> sprite to it. Add the create event, and add the following code.</p> <pre> <code>image_alpha = 0.5; owner = -1; xOffset = 0; yOffset = 0; </code></pre> <p>This is all the code we need for the <strong>hurtbox</strong>. Pretty simple, right? We want to set the <strong>image_alpha</strong> to 0.5 so that the <strong>hurtbox</strong> is transparent. The <strong>owner</strong> variable will be tied to the id of whatever object created it, such as the <strong>oPlayer</strong> object. More on that in a bit. Finally, the <strong>xOffset</strong> and <strong>yOffset</strong> is used to line up the <strong>hurtbox</strong> with its <strong>owner</strong>. Now we need to create the <strong>hurtbox</strong> and give it an <strong>owner</strong>.</p> <p>Create a new script and name it <strong>hurtbox_create</strong>. Add the following code.</p> <pre> <code>_hurtbox = instance_create(x,y,oHurtbox); _hurtbox.owner = id; _hurtbox.image_xscale = argument0; _hurtbox.image_yscale = argument1; _hurtbox.xOffset = argument2; _hurtbox.yOffset = argument3; return _hurtbox;</code></pre> <p>This script looks complicated, but it's fairly simple. First, we create an <strong>oHurtbox</strong> object and store the ID of that object in the <strong>_hurtbox</strong> variable. Then, using the <strong>_hurtbox</strong> variable, we pass in the owner, which will be whatever object is calling this script. From there we define the scale, and offset of the <strong>hurtbox</strong>. Now that the script is created we can put it into action. Open the <strong>oPlayer</strong> object and add the following code to the create event.</p> <pre> <code>//hurtbox hurtbox = hurtbox_create(18,24,-9,-24); //hitbox hitbox = -1;</code></pre> <p>Using the <strong>hurtbox_create</strong> script we just made, we are able to set the scale and offset really easily, and store the ID of the <strong>oHurtbox</strong> object in a variable that the <strong>oPlayer</strong> object can use. The numbers used in the script are measured in pixels. The <strong>hurtbox</strong> we are creating is 18 pixels wide, 24 pixels tall, offset 9 pixels to the left of the player sprite, and offset 24 pixels above the player sprite. If you run the game now, you will notice that your <strong>hurtbox</strong> isn’t following your character around, so let's fix that before moving on. Open the end step event in your <strong>oPlayer</strong> object and add the following code. If you are following along from previous entries in this series, I added mine right below the animation code.</p> <pre> <code>//hurtbox with(hurtbox){ x = other.x + xOffset; y = other.y + yOffset; }</code></pre> <p>Alright, so this little chunk of code makes sure the <strong>hurtbox</strong> is following our player around. Using <strong>with</strong> and <strong>other</strong> is probably a new concept for you, so let me explain. When you use <strong>with</strong> followed by an object name (or specific object ID) the code following runs as if that object were running it. So when we say <strong>with(hurtbox)</strong> we are updating the x and y position from that particular <strong>oHurtbox</strong> object that we have stored in our hurtbox variable.</p> <p>Since we are using <strong>with</strong> we can also use <strong>other</strong>. When using <strong>other</strong> in this context, it is referring back to the original object this code is running from. In this case, that is our <strong>oPlayer</strong> object.</p> <p>Now you can see your <strong>hurtbox</strong> following the player around in the game.</p> <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_2.gif" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_2._CB493896061_.gif?t=true" /></p> <p>When play-balancing your game, there is really only one rule to consider for hurtboxes: The smaller the <strong>hurtbox</strong>, the better it is. It is a lot harder to hit something that is 2x2 pixels than it is 50x50 pixels!</p> <h1>Hitbox setup</h1> <p>Now that we have our <strong>hurtbox</strong>, we need to hit it! It’s <strong>hitbox</strong> time! The setup required for a <strong>hitbox</strong> is pretty similar to that of the <strong>hurtbox</strong>, but it has a bit more going on. The <strong>hitbox</strong> is what actually checks for collisions and determines what to do after a collision is detected.</p> <p>Just like the <strong>hurtbox</strong> we need to create a sprite and an object. Create a one-pixel sprite named <strong>sprHitbox</strong> and color it red. Then create the <strong>oHitbox</strong> object and assign the <strong>sprHitbox</strong> sprite. Add the <strong>create</strong>, <strong>step</strong>, <strong>end step</strong>, and <strong>destroy</strong> events to this object. Open the create event and add the following code.</p> <pre> <code>image_alpha = 0.5; owner = -1; xOffset = 0; yOffset = 0; life = 0; xHit = 0; yHit = 0; hitStun = 60; ignore = false; ignoreList = ds_list_create(); </code></pre> <div> Like with our <strong>hurtbox</strong>, we need to set an <strong>owner</strong> and <strong>offset</strong>. However unlike a <strong>hurtbox</strong>, a <strong>hitbox</strong> doesn’t exist at all times. It only exists during an attack. The <strong>life</strong> variable will be used to determine how many frames the <strong>hitbox</strong> will exist and remain active. <strong>xHit</strong> and <strong>yHit</strong> are our knockback variables. <strong>hitStun</strong> determines how long the character we hit is put into hit stun. More on that below. Finally, the <strong>ignore</strong> and <strong>ignoreList</strong> variables will be used to ensure we don’t hit a character too many times. You’ll see how that works in a bit. <p>Hit Stun is how long, in frames, that a character is stunned after being hit. If a player has been stunned, they cannot do anything! This is the cornerstone of performing combos in a fighting game. If your next attack starts up before your opponent recovers from hit stun, you can hit them again!</p> <p>Open your destroy event and add the following code.</p> <pre> <code>owner.hitbox = -1; ds_list_destroy(ignoreList);</code></pre> This ensures that the <strong>owner</strong> of the <strong>hitbox</strong> stops trying to interact with it once it has been deleted, and it deletes the <strong>ignoreList</strong> when it is no longer needed. If the list is not deleted, it can cause memory leaks, which is no bueno. <p>Moving on to the step event - open that up and add the following line.</p> <pre> <code>life --;</code></pre> This will subtract from the <strong>life</strong> of the <strong>hitbox</strong> while it is active. When the <strong>life</strong> variable reaches zero, the <strong>hitbox</strong> will be deleted. Which brings us to the end step event. This is where our last bit of code will go. Open it up and add the following code. <pre> <code>if(life &lt;= 0){ instance_destroy(); }</code></pre> When an object is destroyed, like we are doing above, the destroy event will be called (if present). The <strong>hitbox</strong> setup is complete—for the actual object, anyway! There is still a lot to do. Much like the <strong>hurtbox</strong>, we need a <strong>hitbox_create</strong> script. Create a new script, name it <strong>hitbox_create</strong>, and add the following code. <pre> <code>_hitbox = instance_create(x,y,oHitbox); _hitbox.owner = id; _hitbox.image_xscale = argument0; _hitbox.image_yscale = argument1; _hitbox.xOffset = argument2; _hitbox.yOffset = argument3; _hitbox.life = argument4; _hitbox.xHit = argument5; _hitbox.hitStun = argument6; return _hitbox;</code></pre> This works exactly like our <strong>hurtbox_create</strong> script, although we are passing in a bit more information. Other than the scale and offset, we also need to set the life, xHit, and hitStun of the hitbox. <p>Exhausted yet? We are about halfway done. Go back into the end step of your <strong>oPlayer</strong> object and add the following lines right below your <strong>hurtbox</strong> code.</p> <pre> <code>//hitbox if(hitbox != -1){ with(hitbox){ x = other.x + xOffset; y = other.y + yOffset; } } </code></pre> This is slightly different than the <strong>hurtbox</strong> code, in that we always want to make sure we actually have a <strong>hitbox</strong> in game at the time. We do this by first checking to see if our <strong>hitbox variable</strong> does NOT equal -1. <p>Now, the final step, we need to actually create the <strong>hitbox</strong> at the right time during our attack. But before we do that I need to give you a brief rundown on the anatomy of an attack in a fighting game. All attacks are broken up into three parts. Start Up, Active, and Recovery. Each of these parts lasts a certain number of frames. Check out the diagram below (I wish I knew who made this so I could give credit).</p> <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_3.gif" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_3._CB493896063_.gif?t=true" /></p> Start Up is how long it takes for your attack to become active. It is the wind up to your punch or kick. Active is how long the <strong>hitbox</strong> is able to actually hit someone. Recovery is how long it takes for your character to finish out their attack and return to a neutral state, after which they are able to perform other actions again. Let's take a look at our character sprite to determine where our start up, active, and recovery frames should be. <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_4.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_4._CB493896062_.png?t=true" /></p> Our start up frames are frames zero to two. These are the wind up of the attack. Active frames are three to four, and recovery five to seven. We need to create our <strong>hitbox</strong> on frame three, and it needs to be active until the start of frame five. In my project, my sprites are animating at about four frames per second, given that my <strong>frameSpeed</strong> variable is 0.15 and the game is running at 60 fps. This means the <strong>life</strong> of my <strong>hitbox</strong> needs to be <strong>eight frames</strong>. <p>Open up the <strong>attack_state</strong> script and add the following lines.</p> <pre> <code>//create hitbox on the right frame if(frame == 3 &amp;&amp; hitbox == -1){ hitbox = hitbox_create(20 * facing,12,-3 * facing,-16,8,3 * facing,45); }</code></pre> We are checking to see if we are on the right <strong>frame</strong>, and that we don’t already have a <strong>hitbox</strong>. If so, we create the <strong>hitbox</strong> using our <strong>hitbox_create</strong> script. When creating the <strong>hitbox,</strong> we need to multiply the horizontal values (both scale and offset) by the direction the character is facing. This ensures that the <strong>hitbox</strong> is always lined up with the orientation of the character. Then we set our eight frames of <strong>life</strong>, followed by horizontal knockback and <strong>hitstun</strong>. If you run the game and start attacking, you should see the <strong>hitbox</strong> appear and disappear as intended. Now we need to make it hit something! <p>A quick word on <strong>hitbox</strong> play balancing. The larger the <strong>hitbox</strong>, the more powerful it is. Same thing with <strong>life</strong>. The longer the <strong>hitbox</strong> is active, the stronger it is. Giant, lingering hitboxes are always very strong in fighting and action games. Keep this in mind when designing your attacks!</p> <h1>Enemy setup</h1> Before we can do any punching, we need something to punch! We need an enemy. Something, or someone in this case, who can receive our rage. This is going to be pretty easy, as the enemy is going to use a lot of the same code as our player. We will, however, need to add some new sprites. You can use any sprites you want, or download <a href="https://drive.google.com/open?id=0B0G4emGoaxhET1JQU01HcXJZcDQ" target="_blank">the same sprites that I am using</a>. <p>Create the sprites the same way as we created the player sprites. Make sure the sprite origin is (16, 32) just like last time! You should have two sprites: <strong>sprEnemy_Idle</strong> and <strong>sprEnemy_Hurt</strong>.</p> <p>Duplicate the <strong>oPlayer</strong> object and name it <strong>oEnemy</strong>. Assign the <strong>sprEnemey_Idle</strong> sprite to the object, and then open up the create event. We need to add some new variables.</p> <pre> <code>hit = false; hitStun = 0; hitBy = -1; </code></pre> <strong>Hit</strong> is a simple boolean we will use when applying hit effects. Next, <strong>hitStun</strong> is how long the enemy will remain in <strong>hitStun</strong> after being hit. Finally, <strong>hitBy</strong> will be the ID of the object that hit them. <p>Moving on to the step event. Open that up, and delete the lines pertaining to player buttons and the state switching. We don’t want the enemy to perform actions when we push buttons, and we need to re-write the state switching. Add the following code.</p> <pre> <code>//state switch switch currentState { case states.hit: hit_state(); break; }</code></pre> Since our enemy is only going to stand still or be hit, we don’t need any other states at the moment. However we do need to create the <strong>hit_state</strong> script. Do that now and add the following code. <pre> <code>xSpeed = approach(xSpeed,0,0.1); hitStun --; if(hitStun &lt;= 0){ currentState = states.normal; }</code></pre> This should look pretty familiar to you if you have been following along. First, we reduce the horizontal speed of the enemy until it reaches zero. Next, we count down <strong>hitStun</strong>, and return the enemy to their default <strong>normal state</strong> when <strong>hitStun</strong> reaches zero. Easy! <p>Moving right along to the end step event. First, replace <strong>animation_control();</strong> with <strong>animation_control_enemy();</strong> and then add this below the <strong>hurtbox</strong> code.</p> <pre> <code>//get hit if(hit){ squash_stretch(1.3,1.3); xSpeed = hitBy.xHit; hitStun = hitBy.hitStun; facing = hitBy.owner.facing * -1; hit = false; currentState = states.hit; }</code></pre> This is where we apply hit effects like knockback, squash and stretch, screenshake (if we had it), and so on. It also changes the enemy state to the hit state, which locks them out of performing any other actions while they are in hit stun. <p>Before we stray too far, we need to create the <strong>animation_control_enemy</strong> script. This is the same kind of script that the player uses, but simplified, considering the enemy has fewer animations and behaviors than the player. Check out the code below and make sure your <strong>animation_control_enemy</strong> script matches.</p> <pre> <code>xScale = approach(xScale,1,0.03); yScale = approach(yScale,1,0.03); //animation control switch currentState { case states.normal: sprite = sprEnemy_Idle; break; case states.hit: sprite = sprEnemy_Hurt; break; } //reset frame to 0 if sprite changes if(lastSprite != sprite){ lastSprite = sprite; frame = 0; } </code></pre> Nothing fancy going on here. All we are doing is setting the sprite based on the state just like we did with the player. <p>Boom! Enemy setup is complete! Place an enemy or two in the room. Now we are moving on to the hard part… checking for hitbox/hurtbox collision (overlap), and resolving that collision.</p> <h1>Hit check and resolve</h1> <div> Alright folks. Strap in. This is where things can get a little weird and hard to follow. Remember using <strong>with</strong> and <strong>other</strong>, and how that is sort of confusing? Well… we are going to use <strong>with</strong> and <strong>other</strong> again, but nested within itself. Telling an object what to do from inside of another object that is inside of another object! Object inception! Okay maybe it’s not <em>that</em> complicated, but it can be hard to read sometimes… <p>Anyway, let's go back into the <strong>oPlayer</strong> object and open the end step event where you put the <strong>hitbox</strong> code earlier. Update it to look like this.</p> <pre> <code>//hitbox if(hitbox != -1){ with(hitbox){ x = other.x + xOffset; y = other.y + yOffset; //check to see if the hurtbox is touching your hitbox with(oHurtbox){ if(place_meeting(x,y,other) &amp;&amp; other.owner != owner){ //do some stuff } } } } </code></pre> Quick recap of what's happening here. We check to see if we actually have a <strong>hitbox</strong> at the time, and if so, we then check all <strong>hurtbox objects</strong> to see if any of them are colliding with this particular <strong>hitbox</strong> instance. When using <strong>with</strong> it's important to note that if you just use the name of an object, like <strong>oHurtbox</strong>, instead of the instance ID of an object, you will be running code from within ALL instances of that object. Now we are two layers deep, and are checking the collision from the <strong>hurtbox</strong>, so when we use <strong>other</strong> it is no longer referencing the main object (the oPlayer object) that is running all of this code, but instead the object that is one layer above this one (the oHitbox object). <p>Check out the diagram below for a visual representation of what is happening.</p> </div> <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_5.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_5._CB493896056_.png?t=true" /></p> <p>The <strong>oPlayer object</strong> is using <strong>with</strong> to talk to the <strong>oHitbox object</strong>, which is then using <strong>with</strong> to talk to the <strong>oHurtbox object</strong>. Each of these <strong>with</strong> calls creates a new <strong>layer</strong> to the code. When an <strong>object</strong> is using <strong>other</strong>, it is referring back to the <strong>layer</strong> above it. It is imperative to understand these layers and how <strong>with/other</strong> work together to fully understand how these collision checks will work.</p> <p>Finally, we need to resolve the collision. We have already checked to see if the <strong>hitbox</strong> and <strong>hurtbox</strong> have collided, and now we need to decide what happens next. This is where our <strong>ignore</strong> variable, and our <strong>ignoreList</strong> comes into play. First we need to check and see if the hitbox has already hit the hurtbox.</p> <pre> <code>//hitbox if(hitbox != -1){ with(hitbox){ x = other.x + xOffset; y = other.y + yOffset; //check to see if the hurtbox is touching your hitbox with(oHurtbox){ if(place_meeting(x,y,other) &amp;&amp; other.owner != owner){ //ignore check //checking collision from the hitbox object with(other){ //check to see if your target is on the ignore list //if it is on the ignore list, dont hit it again for(i = 0; i &lt; ds_list_size(ignoreList); i ++){ if(ignoreList[|i] = other.owner){ ignore = true; break; } } } } } } } </code></pre> <p>Thats a lot of curly brackets… But don’t worry. It will all make sense soon enough. We had to do one additional <strong>with</strong> function after determining that our <strong>hitbox</strong> has collided with a <strong>hurtbox</strong>, and that these two boxes had different <strong>owners</strong>. The <strong>owner</strong> check prevents <strong>hitboxes</strong> from colliding with <strong>hurtboxes</strong> that belong to the same player, and thus, prevents the player from kicking their own butt.</p> <p>Next we check through our list of enemies to ignore. If you have never used a <strong>for loop</strong> before this may be a bit confusing, but it is much more simple than it looks.</p> <p>A <strong>for loop</strong> executes a block of code a certain number of times. In this case, it executes as many times as there are instances of data in our <strong>ignoreList</strong>. It checks each spot in the list, and compares it to the owner of the <strong>hurtbox</strong> it has just collided with. If any of the data in the list matches the <strong>owner</strong> of the <strong>hurtbox</strong>, the <strong>owner</strong> is <strong>ignored</strong>, and does not get hit, and we stop checking the list by using <strong>break</strong>. We do this to prevent the same enemy from being hit every single frame our attack is active. If this ignore check wasn’t present, then the enemy would be hit 8 times in 8 frames.</p> <p>You may be wondering how the <strong>ignoreList</strong> gets populated with data. That is the next step. If our first check fails, that is, if the enemy should NOT be ignored, we can hit them and add their data to the list. Make the following changes to your code.</p> <pre> <code>//hitbox if(hitbox != -1){ with(hitbox){ x = other.x + xOffset; y = other.y + yOffset; //check to see if the hurtbox is touching your hitbox with(oHurtbox){ if(place_meeting(x,y,other) &amp;&amp; other.owner != owner){ //ignore check //checking collision from the hitbox object with(other){ //check to see if your target is on the ignore list //if it is on the ignore list, dont hit it again for(i = 0; i &lt; ds_list_size(ignoreList); i ++){ if(ignoreList[|i] = other.owner){ ignore = true; break; } } //if it is NOT on the ignore list, hit it, and add it to //the ignore list if(!ignore){ other.owner.hit = true; other.owner.hitBy = id; ds_list_add(ignoreList,other.owner); } } } } } } </code></pre> <p>If <strong>ignore</strong> is <strong>false</strong>, then the owner of the <strong>hurtbox</strong> (<strong>other.owner</strong>) is <strong>hit</strong>! We need to tell that object it was hit (<strong>other.owner.hit = true</strong>) and what hit them <strong>(other.owner.hitBy = id</strong>). Then add them to the ignore list so we don’t hit them again on the next frame (<strong>ds_list_add(ignoreList,other.owner</strong>). You should now be able to run the game and punch the heck out of your enemy! They should get knocked back and put into hit stun.</p> <p style="text-align:center"><img alt="111017_hitboxesandhurtboxes_6.gif" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/NathanRanneyblogposts/111017_hitboxesandhurtboxes_6._CB493896013_.gif?t=true" /></p> <h1>Final thoughts</h1> <div> Wow. That was exhausting. I’m proud of you for making it all the way through that. When I set out to write this article, I didn’t really anticipate that it would take this long. I am happy that I got to show off a lot of interesting concepts like with/other, for loops, ds_lists, and simple collision checking. This is just one way to set up hitboxes and hurtboxes, and even though this uses GameMaker-specific code, it should be applicable to any programming language as long as you can do simple AABB (axis-aligned bounding-box) collision checks. <p>I really appreciate you taking the time to read through this post, and I hope you learned something new. You can follow me on <a href="https://www.twitter.com/ratcasket" target="_blank">Twitter</a>, and on my <a href="http://www.ratcasket.com" target="_blank">website</a> for more gamedev related stuff! And for more information on some of the new topics introduced in this post, check out the links below.</p> <h1>Important links</h1> <ul> <li><a href="https://developer.amazon.com/blogs/appstore/post/d5832ec5-fd9b-4bcb-bcc1-27decfb5fb8d/gamemaker-basics-drawing-sprites">Part 1 of GameMaker Basics: Drawing Sprites</a></li> </ul> <ul> <li><a href="https://developer.amazon.com/blogs/appstore/post/c92030bb-6ab8-421f-b0da-a7231a59561d/gamemaker-basics-state-machines">Part 2 of GameMaker Basics: State Machines</a></li> </ul> <ul> <li><a href="https://developer.amazon.com/blogs/appstore/post/65a8aa44-57b4-4990-85ae-0d491d589273/gamemaker-basics-juicing-your-movements">Part 3 of GameMaker Basics: Juicing Your Movements</a></li> </ul> <ul> <li><a href="https://twitter.com/Alugz_P" target="_blank">Sprites and animation by Alexander Prokopiev</a></li> </ul> <ul> <li><a href="https://drive.google.com/open?id=0B0G4emGoaxhETW1vcDNQY2tHSnc" target="_blank">GameMaker final project file</a></li> </ul> <ul> <li><a href="https://docs.yoyogames.com/source/dadiospice/002_reference/data%20structures/ds%20lists/" target="_blank">Ds_lists in GameMaker</a></li> </ul> <ul> <li><a href="https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_18_with.html" target="_blank">About the With function in GameMaker</a></li> </ul> <ul> <li><a href="https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/keywords.html" target="_blank">Keywords in GameMaker</a></li> </ul> <ul> <li><a href="https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_11_for.html" target="_blank">Loops in GameMaker</a></li> </ul> <ul> <li><a href="https://www.youtube.com/watch?v=ghqD3e37R7E" target="_blank">AABB (Axis-Aligned Bounding Box) Collision Detection</a></li> </ul> </div> <p>&nbsp;</p> </div> <p>&nbsp;</p> <p style="text-align:center"><a href="https://www.twitter.com/ratcasket"><img alt="NathanRBio.jpg" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/default/NathanRBio._CB513300692_.jpg?t=true" /></a></p> <p style="text-align:center"><em>Nathan Ranney is the founder of punk house game dev shop, <a href="http://www.ratcasket.com" target="_blank">RatCasket</a>. He’s best known for the creation and development of Kerfuffle, an online indie fighting game.</em></p> /blogs/appstore/post/c70fb70f-bd42-41df-9813-b0b378ff2a7d/publish-gamemaker-studio-2-games-to-amazon-fire-part-1 Publish GameMaker Studio 2 Games to Amazon Fire (Part 1) Emily Esposito Fulkerson 2017-11-09T17:20:22+00:00 2017-11-14T22:29:26+00:00 <p><img alt="Blog_Amazon_SettingUp.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/Blog_Amazon_SettingUp._CB494484329_.png?t=true" style="display:block; height:382px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Welcome to the first part of our <strong>Amazon Fire</strong> tech blogs. In this blog post, we will take you through setting up GameMaker Studio 2 and testing your game on an Amazon Fire device.</p> <p><img alt="Blog_Amazon_SettingUp.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/Blog_Amazon_SettingUp._CB494484329_.png?t=true" style="display:block; height:382px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Welcome to the first part of our <strong>Amazon Fire</strong> tech blogs. In this blog post, we will take you through setting up GameMaker Studio 2 and testing your game on an Amazon Fire device. In Part 2, we’ll cover creating an App Listing on the Amazon Appstore, and then uploading a file to the app store for testing/publishing.</p> <p>Before going any further however, there are a few things that you will need:</p> <ul> <li>A <strong>physical Amazon Fire device</strong> for testing your projects and connecting with GameMaker Studio 2. The device needs to have <a href="https://developer.amazon.com/public/resources/development-tools/ide-tools/tech-docs/05-setting-up-your-kindle-fire-tablet-for-testing#enabling-adb-on-your-fire-tablet">Developer Mode</a> activated and be discoverable using ADB.</li> <li>An <strong>Amazon Developer</strong> <strong>account</strong>. You can find out how to get one and set it up <a href="https://developer.amazon.com/why-amazon">here</a>.</li> <li>An <strong>Amazon Fire licence</strong> for GameMaker Studio 2. You can get a licence for Amazon Fire through several different mechanisms which are outlined <a href="https://help.yoyogames.com/hc/en-us/articles/115001410991-Getting-An-Amazon-Fire-Licence" target="_blank">here</a> (note that there is a 60-day FREE trial available).</li> </ul> <p>If you have not done any of the above, then you should take a moment to do so, otherwise the steps outlined in this tutorial will not permit you to test, compile, or upload your game project correctly.</p> <h1>Setting up</h1> <p>After installing and running GameMaker Studio 2 on your PC or Mac, you can specifically build for Amazon Fire using the <strong>Target Manager </strong>window, opened by clicking the target button in the top-right of the main window:</p> <p><img alt="110817_GameMakerFire_1.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_1._CB493911246_.png?t=true" style="display:block; height:223px; margin-left:auto; margin-right:auto; width:728px" /><br /> For the Amazon Fire target platform, you can see that there are two output options:</p> <ul> <li><strong>VM</strong> - This will build your game using interpreted code.</li> <li><strong>YYC</strong> - This will build your game using compiled native code.</li> </ul> <p>The VM option will build your game and use interpreted code within a special YoYo Runner. The performance of this target is less optimised than YYC, but it is faster to compile and offers the ability to run in debug mode (when using YYC, the debugger will not start, and instead you will be asked if you would like to test using the VM instead). The YYC target however, gives a much greater optimization (and corresponding performance boost) especially with logic-heavy games, but large projects can take some time to compile and you cannot use the debugger.</p> <p>Regardless of the output that you select, you will need to add some extra build tools to your development computer before you can continue.</p> <h1>Required downloads</h1> <p>Amazon Fire is based on the popular Android framework, so to start working with your Amazon Fire devices and GameMaker Studio 2, you will need to download and install the following development kits:</p> <ul> <li>Android SDK</li> <li>Android NDK</li> <li>Java SE Development Kit (JDK)</li> </ul> <p>These kits will be used when testing and building your project for Amazon Fire. Note that the exact versions required for each (along with links for downloading them) can be found from the article, although we’ll be using Android Studio to control all this:</p> <p style="text-align:center"><a href="http://help.yoyogames.com/hc/en-us/articles/227860547" target="_blank">Required SDKs</a></p> <h1>Set up the Android SDK and NDK for Amazon Fire</h1> <p>When using GameMaker Studio 2, you will also need to install <strong>Android Studio</strong> as it will be used to set up a number of things that are required. You can get Android Studio from the following link, and once downloaded, you will need to install it on your PC or Mac:</p> <p style="margin-left:0.5in; text-align:center"><a href="https://developer.android.com/studio/index.html" target="_blank">Download Android Studio</a></p> <p>When installing Android Studio, you can choose either the <em>Default</em> install or the <em>Custom</em> install. <strong><em>We recommend the custom install</em></strong> as it gives you the option to get the Android NDK and set up your computer to use Virtual Devices as well (you need to select them from the custom install screen shown below):</p> <p><img alt="110817_GameMakerFire_2.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_2._CB493911243_.png?t=true" style="display:block; height:558px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>If you choose the <em>Default</em> install, then you will need to later add the NDK if you wish to compile using the YYC runtime.</p> <p>Regardless of the install type, once it has installed, you need to run Android Studio and on the Splash Screen, go to the menu labeled &quot;<em>Configure,&quot;</em>&nbsp;and in the drop-down menu select the <em>SDK Manager</em>.</p> <p><img alt="110817_GameMakerFire_3.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_3._CB493911237_.png?t=true" style="display:block; height:663px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>This will open the following window where you can select and install the platform SDKs that you require (in general you simply need the latest SDK, but you can install any, or all, of those on the list, as long as you ensure you use the correct SDK values later in GameMaker Studio 2):</p> <p><img alt="110817_GameMakerFire_4.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_4._CB493911239_.png?t=true" style="display:block; height:432px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>You can see in the image above that we have also highlighted the <strong>Android SDK Location</strong>. You should take note of this as you'll need it later in the GameMaker Studio 2 <strong>Preferences</strong>. Once you have downloaded the required platform SDKs, you need to click on the <em>SDK Tools</em> tab and then download and install the following (select each of them from the list then click <em>Apply</em> to download them—note that you may need to accept licence agreements before the download begins):</p> <p><img alt="110817_GameMakerFire_5.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_5._CB493911232_.png?t=true" style="display:block; height:502px; margin-left:auto; margin-right:auto; width:728px" /></p> <p style="margin-left:.5in"><strong><em>IMPORTANT!</em></strong><em> Make sure to take note of the </em><strong><em>Build Tools Version number</em></strong><em> as well as that of the </em><strong><em>API</em></strong><em> installed, as you will need these later in GameMaker Studio 2.</em></p> <p>Note that the above image shows the Android NDK selected, too. This is required if you wish to use the YYC runtime to create your project APK, but for regular VM compilation this is not necessary (if you have performed a custom Android Studio install, then this may already be added and installed).</p> <h1>Amazon Fire support</h1> <p>To be able to target any <strong>Amazon Fire </strong>device and use any of the Amazon services in your game, you will also need to download an additional set of files from the SDK Manager.</p> <p>In Android Studio you will need to go to the <strong>SDK Update Sites</strong> tab. Here you should click the (+) at the bottom and then enter the following in the window that opens:</p> <p style="margin-left:0.5in; text-align:center"><strong><em>https://s3.amazonaws.com/android-sdk-manager/redist/addon.xml</em></strong></p> <p>Name the entry something like &quot;Amazon Fire,&quot; click <em>Okay</em>,&nbsp;and then in Android Studio, click <em>Apply</em>. The SDK Update Sites tab should now look like this:</p> <p><img alt="110817_GameMakerFire_6.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_6._CB493911212_.png?t=true" style="display:block; height:423px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>If you go back to the <strong>SDK Tools</strong> tab, you will now have new entries for Amazon Fire, specifically <strong>Amazon Fire Phone Build Tools </strong>and <strong>Kindle Fire USB Driver. </strong>You should select these, then click <em>Apply</em> to install the components:</p> <p><img alt="110817_GameMakerFire_7.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_7._CB493911215_.png?t=true" style="display:block; height:481px; margin-left:auto; margin-right:auto; width:728px" /></p> <h1>Java JDK</h1> <p>Once you have the Android SDK along with the Amazon Fire support libraries and the NDK installed, you may then wish to download and install the <strong>Java JDK</strong>. By default, Android Studio comes with its own version of the JDK, which should be fine to use, but if you wish to use a specific JDK version then you will need to install it separately.</p> <p>You can get the JDK for both Windows and Mac here:&nbsp;<a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" target="_blank">Java SE Development Tools</a></p> <p>When installing a stand-alone JDK, make sure to get the one specified in the <a href="http://help.yoyogames.com/hc/en-us/articles/227860547" target="_blank">Required SDKs</a> document.</p> <p>Once you have installed the JDK and its components, and have the Android SDK and NDK set up, you can continue with GameMaker Studio 2.</p> <h1>Set up GameMaker Studio 2</h1> <p>When you go back to GameMaker Studio 2,&nbsp;the first thing you need to do is open or create a new project and then set up the <strong>Amazon Fire Platform Preferences</strong>:</p> <p><img alt="110817_GameMakerFire_8.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_8._CB493911209_.png?t=true" style="display:block; height:417px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Here you need to link each of the downloaded SDKs with GameMaker Studio so that you can test and build your games. Once you have supplied the required paths for the SDK, NDK (if you chose to install this), and JDK, they should show a green &quot;Found&quot; label (note that you can find the Android Studio paths to each of these components from the <em>File</em> &gt; <em>Project Structure</em> window).</p> <p><strong><em>NOTE</em></strong><em>: If you have the Android platform set up and working, then you can choose the “<strong>Sync from Android</strong>” option to carry over all the prefs to Amazon Fire.</em></p> <p>Now you can continue to create your <strong>keystore</strong> file:</p> <p><img alt="110817_GameMakerFire_9.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_9._CB493911208_.png?t=true" style="display:block; height:466px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>The keystore is a file that will be used to &quot;sign&quot; all your Amazon Fire apps, so&nbsp;fill in all the details correctly <strong><em>and then back this file up</em></strong>! We recommend you create a single keystore file for <em>all</em> your projects and not separate ones for each project.</p> <p><strong>If you lose your keystore or forget the alias/password details, you will not be able to perform updates on Amazon apps that have already been published!</strong></p> <p>When creating a <em>new</em> keystore file, you are required to give the following details:</p> <ul> <li><strong>File name</strong> - this is the filename of the keystore (NOTE: <em>Not</em> your name or the company name!), and once it has been created this field will show the full path to it.</li> <li><strong>Password</strong> - your security password for the keystore file which must be <em>at least</em> six characters long.</li> <li><strong>Alias</strong> - this is the name of the &quot;user&quot; for this keystore and can differ from the name field above.</li> <li><strong>Alias password</strong> - your security password for the alias given above, which must be <em>at least</em> six characters long.</li> </ul> <p>The right-hand side is optional and has no relation inside GameMaker Studio 2, but we recommend you fill them in anyway.</p> <ul> <li><strong>Common name</strong> - this would normally be your name</li> <li><strong>Organisational unit</strong> - the department within the company that you are in</li> <li><strong>Organization</strong> - the name of your company</li> <li><strong>Location</strong> - the name of the town or city where you are based</li> <li><strong>Country</strong> - the <a href="http://www.worldatlas.com/aatlas/ctycodes.htm" target="_blank">two-letter code</a> for the country where you are based</li> </ul> <p><em>Note that all names <strong>must</strong> have only letters, numbers, and spaces—<strong>no other &quot;special&quot; characters!</strong></em></p> <p>Once this information is filled in and you are happy with it, press the button marked <strong>Generate Keystore</strong> for GameMaker Studio 2 to create the necessary keystore file. This may take a moment, but once it is done it normally will not need to be changed again.</p> <p>If you are using an <em>existing</em> keystore file, then simply point GameMaker Studio 2 to the file and fill in the details <em>exactly</em> as they were when you first generated it. <strong><u>Do not</u> hit the Generate Keystore button</strong>, instead click <strong>Apply</strong>.</p> <p>Just to repeat what was said before, as it's very important: <em>please back up your keystore file somewhere safe and make sure to remember your details; we recommend taking a screenshot with the passwords displayed and then backing this image file up along with your keystore.</em> You can find the generated keystore at the path you have in the top field of this preferences form.</p> <p>Once everything is set up here, you can continue to add one or more devices for testing.</p> <h1>Set up an Amazon Fire device</h1> <p>Going back to GameMaker Studio 2, in the <em>Target Manager,</em> you can see that there is a section marked <em>Devices</em> with a small &quot;pencil&quot; icon beside it:</p> <p><img alt="110817_GameMakerFire_10.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_10._CB493911210_.png?t=true" style="display:block; height:245px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Clicking this will open up the Amazon Fire <strong>Device Manager</strong> where you can add one or more Fire devices to target when running and building your projects for Amazon Fire devices. For GameMaker Studio 2 to detect your device, it must first have been plugged into the PC or Mac using a USB cable, and must have <a href="https://developer.amazon.com/public/resources/development-tools/ide-tools/tech-docs/05-setting-up-your-kindle-fire-tablet-for-testing#enabling-adb-on-your-fire-tablet">Developer Mode and USB Debugging</a> enabled. On Mac, you will also need to have installed the <a href="https://www.android.com/filetransfer/" target="_blank">Android File Transfer App</a>.</p> <p>Once the device is connected, clicking <strong>Detect Device</strong> should automatically detect it and add it to the list of connected devices:</p> <p><img alt="110817_GameMakerFire_11.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_11._CB493911223_.png?t=true" style="display:block; height:378px; margin-left:auto; margin-right:auto; width:728px" /><br /> With that done you can then click the <strong>Test Connection </strong>button, and if the Amazon Fire device is visible and correctly connected via USB, then it should say the connection is successful:</p> <p><img alt="110817_GameMakerFire_12.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_12._CB493911222_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /><br /> Note that you <strong>cannot use any virtual device (AVD) for Amazon Fire</strong> and will need to own a physical device for proper testing.</p> <h1>Set up game options</h1> <p>Unlike some other target platforms, before you can test your game, you need to set some things in the <strong>Android Game Options</strong>, namely the initial <strong>Build Settings</strong>:</p> <p><img alt="110817_GameMakerFire_13.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_13._CB493911216_.png?t=true" style="display:block; height:401px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>GameMaker Studio 2 gives you the option to selectively target specific versions of the Android OS, mainly due to the fact that certain extensions require different SDK or build tools. For a &quot;vanilla&quot; project (i.e. one that has no extensions or extra requirements), you would normally set these to the most up-to-date versions of everything.</p> <p>You first need to give the <strong>Build Tools</strong> version, which can be found from the SDK Tools section of the SDK Manager in Android Studio, although note that you will need to check the &quot;Package Details&quot; to see it:</p> <p><img alt="110817_GameMakerFire_14.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_14._CB493911218_.png?t=true" style="display:block; height:480px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>You also need to get the <strong>Support Library</strong> to use. Recent versions of the SDK Manager no longer list these separately and instead they are included as part of the <em>Support Repository</em>, so to target the correct one, you should browse to the location where you installed the Android SDK and then check the following folder:</p> <p style="text-align:center"><em>&lt;AndroidSDK_Location&gt;\extras\android\m2repository\com\android\support\support-v4</em></p> <p>You will see a list of folders with version numbers and you should select the value of whichever is appropriate:</p> <p><img alt="110817_GameMakerFire_15.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_15._CB493911181_.png?t=true" style="display:block; height:283px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>Next you have to set the <em>Target</em>, <em>Minimum,</em> and <em>Compile</em> SDK versions. The <strong>Compile SDK</strong> version is the version of the API that the project is compiled against. This means you can use Android API features included in that version of the API. If you try and use API 16 features, for example, but set Compile SDK 15, then you will get a compilation error. If you set the Compile SDK to 16 then you can still run the app on an API 15 device (as well as all other previous versions too).</p> <p>The <strong>Target SDK</strong>, however, has nothing to do with how your app is compiled or what APIs you can utilize. The Target SDK indicates that you have tested your app on (up to and including) the version you specify. This is simply to give the Android OS an idea of how it should handle your app in terms of OS features. For all practical purposes, most apps are going to want to set Target SDK to the latest released version of the API (as used by the Compile SDK setting). This will ensure your app looks as good as possible on the most recent Android devices.</p> <p>The <strong>Minimum</strong> SDK version is the minimum API level that will run your project. This is set to nine by default, and in general this will be fine, but if you add extensions, then they may require a higher minimum API level.</p> <p>You don't need to give any further information here if you are just testing your projects, and so you can close the Game Options and continue.</p> <h1>Testing on an Amazon Fire device</h1> <p>Once the above sections are completed and you have a project ready for testing, you can go to Target Manager and select the target, output, and device options that you want to use:</p> <p><img alt="110817_GameMakerFire_16.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/110817_GameMakerFire_16._CB493911173_.png?t=true" style="display:block; height:245px; margin-left:auto; margin-right:auto; width:728px" /></p> <p>You can then click the <strong>Play</strong> button in the GameMaker Studio <em>2</em> IDE to compile the project and push it to your test device.</p> <p>Note that the first time you try to test an Amazon Fire game, Google's compile tools may need to connect to the Internet to download additional files and tools, which in turn may prompt a firewall alert. If this happens, you should allow the connection, otherwise the build will fail. This is normal and should only happen the first time you build using those SDK values. Be aware that Gradle (the Google tool in question) will occasionally check for its own updates, though, if you are online at the time.</p> <p>If all has gone well, you should see your game project running on your target device.</p> <p>Once you have finished testing and are happy with the project, then you'll want to look at creating a final executable package and publishing it to a store. This process is explained in Part 2 of this tech blog, coming soon!</p> /blogs/appstore/post/3e78a547-3ea4-459f-9131-43ae6e235892/git-started-with-source-control-and-gamemaker-studio-2-part-2 Git Started with Source Control and GameMaker Studio 2 (Part 2) Becky Young 2017-11-08T17:00:00+00:00 2017-11-08T20:01:56+00:00 <p style="text-align:center"><img alt="" src="https://m.media-amazon.com/images/G/01/appstore/103017_GIT3._CB512408933_.jpg" style="height:400px; width:750px" /></p> <p>This is the second part in our series about setting up source control in GameMaker Studio 2. In this post, we will cover how to deal with merge conflicts.</p> <p style="text-align:center"><img alt="" src="https://m.media-amazon.com/images/G/01/appstore/103017_GIT3._CB512408933_.jpg" style="height:400px; width:750px" /></p> <p>Hello again! This is the second part in our series about setting up source control in GameMaker Studio 2. If you haven't read part one yet, I suggest you do so by clicking <a href="https://developer.amazon.com/blogs/appstore/post/d7cfe367-188e-4c89-98b2-1cdeef0c34ab/git-started-with-source-control-and-gamemaker-studio-2-part-1">here</a>.</p> <p>In this post, we will cover how to deal with merge conflicts. The article is divided into the following sections:</p> <ul> <li>Quick reminder</li> <li>Setting your diff/merge tool</li> <li>Solving common merge conflicts</li> <li>Reverting to a previous version</li> <li>Useful external tools to consider</li> </ul> <p><em>Disclaimer about screenshots:</em> I am using a custom skin in GMS2. The windows may look different from yours, but the options are all the same.</p> <h1>Quick reminder</h1> <p>As mentioned in <a href="https://developer.amazon.com/blogs/appstore/post/d7cfe367-188e-4c89-98b2-1cdeef0c34ab/git-started-with-source-control-and-gamemaker-studio-2-part-1">the first post</a>, the basic loop when using source control is as follows:</p> <p style="text-align:center"><strong>Make Changes</strong> <strong>--</strong>&gt; <strong>Save --</strong>&gt; <strong>Commit --</strong>&gt; <strong>Pull --</strong>&gt; <strong>Merge --</strong>&gt; <strong>Commit Merge --</strong>&gt; <strong>Push</strong></p> <p>If you are working alone, the <strong>Merge</strong> and <strong>Commit Merge</strong> sections will most likely never happen (unless you are committing from a revision that is not the head). However, if multiple people are working on the same project, it is very hard not to modify the same file at one point or another, so you will encounter these merge conflicts. This article will explain how to identify and solve the most common ones.</p> <h1>Setting your diff/merge tool</h1> <p>GameMaker Studio 2 doesn't come with a built-in diff/merge tool, so you will need to download your own and set it up. There are many tools that achieve this purpose. I will cover how to set up KDiff3, but you can use your favorite tool.</p> <p>First, go to <a href="http://kdiff3.sourceforge.net/" target="_blank"><strong>http://kdiff3.sourceforge.net/</strong></a> and download the latest version of KDiff3. Install it and remember the local path.</p> <p>In GameMaker, go to <strong>Preferences &gt; Plugins &gt; Source Control (Git)</strong>. You need to locate your diff/merge tool (it may differ from mine), and the parameters to send the program when it is called. This is what it should look like:</p> <p style="text-align:center"><img alt="110517_Git1.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git1._CB512613484_.png?t=true" /></p> <p>Here are the lines in question, to make it easier to copy/paste into your editor:</p> <p><strong>Merge</strong></p> <p>${scm_theirs} ${scm_mine} -o ${scm_merged}</p> <p><strong>Diff</strong></p> <p>${scm_base} ${scm_theirs}</p> <p>We are asking the program to open three files when merging: the local file (<strong>mine</strong>), the file on the repository (<strong>theirs</strong>), and the output (<strong>merged</strong>). To diff, you only need two files, <strong>base</strong>, which is the version before the conflict occurred, and <strong>theirs</strong>.</p> <p>With the diff/merge tool configured, let's take a look at how to resolve the most common merge conflicts.</p> <h1>Solving common merge conflicts</h1> <p>It would be impossible to cover every single possible merge conflict you may encounter while working on a project with other people. Identifying and fixing merge issues requires experience and running into these cases, but once you understand the basics behind the solutions, you will be on your way to solve any issue. The following are the most common conflicts you will come across.</p> <p>After you commit your changes and pull from the repository, GameMaker will compare all the files and check for conflicts. If there is a conflict, you will get a window that looks like this:</p> <p style="text-align:center"><img alt="110517_Git2.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git2._CB512613486_.png?t=true" /></p> <p>In the big box, you will see all the files and events where conflicts have occurred. You now have three options:</p> <ol> <li><strong>Use Theirs</strong>. Ignore your local changes and use whatever is in the repository.</li> <li><strong>Use Mine</strong>. Ignore the changes in the repository and use your local ones instead.</li> <li><strong>Merge</strong>. Open the merge tool and address the conflict.</li> </ol> <p>If you see a conflict on a file you don't remember changing, or you know the changes on the server are the most up-to-date ones, then <strong>Use Theirs</strong>. If you believe your changes are more recent than the ones in the repository, <strong>Use Mine</strong>. If you are not confident in what the most up-to-date changes are, <strong>Merge</strong>. This will open the merge tool and show you three files: The file in the repository, your local file, and an output file, which is the one that will be changed.</p> <p>This is what it looks in each situation:</p> <h2>Updated a binary file (image, sound file, font, etc).</h2> <p>You can only merge text files (code, views, scripts, objects, etc). So, if the conflict happened in a binary file (image, sound, font, etc) then you need to either select <strong>Theirs</strong> or <strong>Mine</strong>. Merging binary files is not a valid operation.</p> <h2>Changed the same line</h2> <p style="text-align:center"><img alt="110517_Git3.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git3._CB512613480_.png?t=true" /></p> <p>The highlighted lines are the ones where the conflict lies. If you right-click the conflict in the output file, can select the lines from file A, file B, or both. Once you are done, <strong>Save</strong> <strong>the output file</strong> (Ctrl + S or the save icon at the top) and close the diff tool and confirm if the merge was successful or not in GameMaker.</p> <p style="text-align:center"><img alt="110517_Git4.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git4._CB512613483_.png?t=true" /></p> <p>If you select <strong>No</strong>, the conflict will remain in the conflicts window. Else, it will be removed. You need to solve every conflict before you can push your changes.</p> <h2>Added two different sections at the same location in a file</h2> <p style="text-align:center"><img alt="110517_Git5.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git5._CB512613482_.png?t=true" /></p> <p>In this situation, we have added two different pieces of code at the same place in a file. If you want to keep only one change, then do so. However, if you want to keep both, then select &quot;files from A&quot; and &quot;files from B&quot; in each of the conflict locations, and you will get an output similar to the one in the image above. Remember that you can modify the output file if you need&nbsp;(to change spacing, line breaks, swap statements, etc).</p> <h2>Added a different event to the same file</h2> <p style="text-align:center"><img alt="110517_Git6.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git6._CB512613434_.png?t=true" /></p> <p>This one is tricky because the diff tool will count the number of events in your object and&nbsp;notice you have the same amount of events, but then it will think you changed one of them into another type of event. In reality, you added two different events to the same file which means you will want to add BOTH events to the file. In this situation, I recommend selecting lines from file A in both conflict sections (<strong>id</strong> and <strong>eventtype</strong>), copying the event from file B, and appending it to the end of the last event in the output file. <strong>Don't forget to add a comma between both events</strong>. This is what the output should look like:</p> <p style="text-align:center"><img alt="110517_Git7.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git7._CB512613428_.png?t=true" /></p> <p>This one is a good example of weird merge conflicts you will get which you may not know how to solve at first, but after you've seen it once, you have the experience and knowledge to fix it in the future without too much trouble.</p> <h1>After merging</h1> <p>When all files are successfully merged, you will need to commit again to&nbsp;reflect the new version with all the merges. GameMaker will generate a Commit Message for you this time around, which is useful. You can still modify it, but it's up to you. The message points out the resolved conflicts, like so:</p> <p style="text-align:center"><img alt="110517_Git8.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git8._CB512613431_.png?t=true" /></p> <h1>Revert to a previous version</h1> <p>One of the most important features of source control is that you can revert (or roll-back) to a previous version of your project. Do this by going to<strong> Source Control &gt; View History</strong>.</p> <p style="text-align:center"><img alt="110517_Git9.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git9._CB512613425_.png?t=true" /></p> <p>A window will pop up with three sections:</p> <ul> <li><strong>Commit History</strong>: Shows you basic information about the commit, such as the date and time, the person who made the commit and the first line of the commit message. There, you can select the commit you want to explore and the bottom two sections will display the changes.</li> <li><strong>Message for Commit</strong>: Here you will have a more detailed look at the commit message&nbsp;in case it was too long and got truncated.</li> <li><strong>Files Modified in Commit</strong>: This shows you every file that was changed, added or removed in this commit.</li> </ul> <p style="text-align:center"><img alt="110517_Git10.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/Influencerblogs/110517_Git10._CB512613427_.png?t=true" /></p> <p>There are a few things we can do from here. First, you can revert to a specific revision by right-clicking the revision in the top section and selecting <strong>Revert to this Revision</strong>. This will revert every file to be the same as what it was in that revision. Watch out, as this&nbsp;will discard any uncommitted. You can also double-click any of the modified files in the third section, to open a diff window, showing you the differences that file went through in that revision. Last, you can right-click any of the files in the third section to revert only that specific file, or files, to that version, instead of the entire commit.</p> <h1>Useful external tools to consider</h1> <p>There are several external tools you can use to get even more functionality out of your source control. Almost every GameMaker file is a text file, which makes it great for source control. The internal Git plugin is great, but it has limitations, such as not allowing members from forking from the main branch. It is viable to work on a project with only one branch, and it has its benefits (more frequent, but smaller merge conflicts, the project is always the most current one on everyone's computer, etc). However, working with multiple branches also has a ton of benefits, especially if some people in your team are working on incomplete features or sections of the game that break it for everyone else in the team. In these cases, they can either work by only doing local commits until they are confident they can push it to the server, or they can create their own branch and work there interrupting no one else. To get this functionality, you can use external tools and set up source control on the GameMaker project folder instead of using the Git Plugin. This is what I did when working on HackyZack and INK and the process was nice. The tools I recommend, if you want to follow this approach, are:</p> <ul> <li>For Git Repositories: <a href="https://www.gitkraken.com/" target="_blank"><strong>GitKraken</strong></a> or <a href="https://www.sourcetreeapp.com/" target="_blank"><strong>SourceTree</strong></a>.</li> <li>For Mercurial Repositories: <a href="https://tortoisehg.bitbucket.io/" target="_blank"><strong>TortoiseHG</strong></a>.</li> </ul> <p>I am always willing to help out if you run into any issues with the material covered in the article, or something else related to GMS2. You can contact me on <a href="https://twitter.com/alehitti" target="_blank">Twitter</a>.</p> <p style="text-align:center"><img alt="AlejandroBio.jpg" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/default/AlejandroBio._CB512098171_.jpg?t=true" style="height:145px; width:583px" /></p> <p style="text-align:center"><em>Alejandro Hitti is a videogame Programmer and Designer from Venezuela. Although his background is in C++ and&nbsp;using custom-made game engines, his two commercial games, INK and HackyZack, were made using GameMaker Studio 1.4. With the release of GameMaker Studio 2, that became his engine of choice. The novelty of GMS2, paired with his knowledge of the previous version, ignited his interest to create tutorials that focus on this new engine.</em></p> /blogs/appstore/post/68763da0-8cdc-4f4a-825f-38eeb5c97504/introducing-gamemaker-studio-2-support-for-fire-os Introducing GameMaker Studio 2 Support for Fire OS Serena McIntire 2017-11-07T23:46:51+00:00 2017-11-09T18:57:39+00:00 <p style="text-align:center"><img alt="GameMaker-banner-728x280.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/GameMaker-banner-728x280._CB493883862_.png?t=true" /></p> <p>YoYo Games is launching the all-new Amazon Fire edition for GameMaker Studio 2 (GMS2), letting developers create and publish Amazon Appstore games directly from the GameMaker IDE.</p> <p style="text-align:center"><img alt="GameMaker-banner-728x280.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/GameMakerStudio2/GameMaker-banner-728x280._CB493883862_.png?t=true" /></p> <p>Appstore is excited to announce the continued support for Fire OS in YoYo Game’s GameMaker Studio. Today, YoYo Games is launching the <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">all-new Amazon Fire edition for GameMaker Studio 2 (GMS2)</a>, letting developers create and publish Amazon Appstore games directly from the GameMaker IDE. <a href="https://developer.amazon.com/blogs/appstore/post/c70fb70f-bd42-41df-9813-b0b378ff2a7d/publish-gamemaker-studio-2-games-to-amazon-fire-part-1" target="_blank">Here is a tutorial on setting up GameMaker 2 for Amazon Fire OS</a>.</p> <p>“We’re confident that focusing on making a game for the Amazon Appstore is a great way for developers to get their feet wet with mobile game development,” said James Cox, general manager, YoYo Games. “This option gives a very accessible entry point into mobile game development and publishing on the Amazon Appstore. We even made sure to give developers an effortless way to deploy their games to other mobile platforms – just pay the difference to upgrade the license to Mobile, and you’ll be taking advantage of GMS2's incredibly easy-to-use multi-platform support in no time.”</p> <h2>GameMaker Studio 2</h2> <p>With a fresh user interface and many new exciting features including like Real-Time Animation Editing, a new innovative workflow, and a seamless path from drag and drop to actual code, GMS2 is a perfect choice for developers of all abilities looking to create games on Fire OS. Developers using the new GMS2 Amazon Fire edition to create and publish games now have access to the most recent and all future versions of Amazon’s application program interfaces (APIs), including in-app purchasing and reporting. The Amazon Fire product for GMS2 will also be <a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">available at no additional cost to developers for a 60-day trial </a><a href="https://www.yoyogames.com/gamemaker-fire" target="_blank">period</a>, so that anyone wishing to test the functionality can do so.</p> <h2>Amazon Fire edition</h2> <p>To get started making Amazon Appstore games with GMS2, simply add the Amazon Fire edition to your <a href="https://www.yoyogames.com/get" target="_blank">YoYo Games account</a>. You can also watch our tutorial here. The new Amazon Fire edition works across the full range of Amazon Fire devices including Fire TV, Fire TV Stick, and compatible Fire tablets. After the 60-day free trial, you can purchase the GMS2 Amazon Fire version for $149 on the<a href="http://www.yoyogames.com/gamemaker/fire" target="_blank"> YoYo Games website</a>.</p> <p>-Jesse Freeman (@jessefreeman)</p> /blogs/appstore/post/4c1f5215-17dd-4f4f-bc73-a8e0ed02252f/amazon-fire-tv-goes-worldwide-with-fire-tv-stick-basic-edition Amazon Fire TV Goes Worldwide with Fire TV Stick Basic Edition Serena McIntire 2017-11-07T18:45:36+00:00 2017-11-07T18:45:36+00:00 <p style="text-align:center"><img alt="Dozier-blog-icons-728x267.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/FireTV/Dozier-blog-icons-728x267._CB494117601_.png?t=true" style="display:block; margin-left:auto; margin-right:auto" /></p> <p>Now available to customers in more than 100 countries and territories, the Fire TV Stick Basic Edition brings media streaming and the Amazon Fire TV experience to a global audience, including Canada, France, Italy, and Spain—and will be coming soon to Brazil and Mexico.</p> <p style="text-align:center"><img alt="Dozier-blog-icons-728x267.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/FireTV/Dozier-blog-icons-728x267._CB494117601_.png?t=true" style="height:267px; width:728px" /></p> <p style="text-align:center"><em>Last year, we made Amazon Prime Video available to customers globally, and today, we’re building on that momentum as we introduce Fire TV Stick Basic Edition to new customers around the world.</em> —Marc Whitten, Vice President, Amazon Fire TV</p> <p>Now available to customers in more than 100 countries and territories, the Fire TV Stick Basic Edition brings media streaming and the Amazon Fire TV experience to a global audience, including Canada, France, Italy, and Spain—and will be coming soon to Brazil and Mexico. This means more potential customers for your Android app or game when you publish it on Amazon Appstore and target Fire TV.</p> <h2>The living room meets mobile</h2> <p>Amazon Fire TV devices are built on Fire OS, Amazon’s Android-based operating system, so creating apps for them is straightforward—you can use the same tools and frameworks as you would for any other Android device. With Fire TV, your mobile app or game is accessible from the living room, on the biggest screen in the house. We call it the 10-foot experience, and it allows customers to enjoy your app from the comfort of their living rooms.</p> <p>The Fire TV Stick Basic Edition comes with a quad-core processor and 1GB of memory, delivering the performance your app needs and allowing you to provide the best user experience possible. Support for 802.11ac WiFi and High Efficiency Video Codec (HEVC) enables full 1080p HD video with no trouble, and Dolby Audio means you can offer rich, cinematic surround sound.</p> <h2>Submit your app and go global on TV</h2> <p>If you’ve never released an app or game for Fire TV, head over to <a href="https://developer.amazon.com/docs/fire-tv/getting-started-developing-apps-and-games.html">Getting Started Developing Apps (Amazon Fire TV)</a> for a quick intro. You’ll learn about development options (for example, native versus web apps), device and media specifications, and APIs that are available to you. You’ll be ready to publish in no time.</p> <p>Upload your completed app or game to Amazon Appstore—or update an existing app you’ve already submitted—and take full advantage of the new worldwide availability of Fire TV Stick Basic Edition. On our <a href="https://developer.amazon.com/myapps.html" target="_blank">Developer Portal</a>, just indicate that you want your app to be accessible in all countries and regions where Amazon sells apps:</p> <p style="text-align:center"><img alt="Dozer-blog-pic.png" src="https://m.media-amazon.com/images/G/01/DeveloperBlogs/AppstoreBlogs/FireTV/Dozer-blog-pic._CB494120613_.png?t=true" style="height:140px; width:727px" /></p> <p>We’ll automatically determine whether your app is compatible with our devices, based on the executable file you provide (and the manifest associated with it).</p> <h2>Customers love Amazon Fire TV devices</h2> <p>Fire TV devices offer quick and easy access to apps, games, and popular content from multiple providers, including Amazon Prime Video. Set-up is simple: just plug it into an HDMI port on your HDTV, connect to WiFi, and start streaming in minutes. Fire TV Stick Basic Edition is now available in more than 100 countries and territories and customers can set their default language as Spanish, Italian, French, Brazilian Portuguese, German, or English. Fire TV Stick Basic Edition makes it possible for your app or game to reach TV users around the world.</p> <p>-peter (@peterdotgames)</p>