‏إظهار الرسائل ذات التسميات Games. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Games. إظهار كافة الرسائل

الأربعاء، 31 أغسطس 2016

Android Developer Story: Hutch improves player engagement with A/B testing on Google Play

Posted by Lily Sheringham, Google Play team


Hutch is a London based mobile studio focusing entirely on racing games, with
more than 10 million players on Google Play. For their latest game, MMX Hill
Climb, they used A/B testing and game analytics to improve the game design and
experience resulting in more than 48 mins daily active usage per user.



Watch Shaun Rutland, CEO, and Robin Scannell, Games Analyst, explain how they
were able to deliver a more engaging user experience in this video.






Learn more
about A/B testing
and get the href="http://g.co/play/playbook-androiddevblogposts-evergreen">Playbook for
Developers app to stay up-to-date on new features and learn best practices
that will help you grow a successful business on Google Play.

الاثنين، 29 أغسطس 2016

Announcing Open Registration and Exhibitors for Google Play Indie Games Festival in San Francisco, Sept. 24


Posted by Jamil Moledina, Google Play, Games Strategic Lead



To celebrate the art of the latest innovative indie games, we’re hosting the
first href="https://events.withgoogle.com/google-play-indie-game-festival/">Google
Play Indie Games Festival in North America on September 24th in San
Francisco. At the festival, Android fans and gamers will have a unique
opportunity to play new and unreleased indie games from some
of the most innovative developers in the US and Canada, as well as vote for
their favorite ones.



href="https://events.withgoogle.com/google-play-indie-game-festival/registrations/new/">Registration
is now open and the event is free for everyone to enjoy.






We’re also excited to announce the games selected to exhibit and compete at the
event. From over 200 submissions, we carefully picked 30 games that promise the
most fun and engaging experiences to attendees. Fans will have a chance to play
a variety of indie games not yet available publicly.



Check out the full list of games selected href="https://events.withgoogle.com/google-play-indie-game-festival/exhibiting-games/">here
and below.







Fans will also have the opportunity to vote for their favorite games at the
festival, along with an authoritative panel of judges from Google Play and the
game industry. They include:


  • Ron Carmel, Co-founder of Indie Fund; co-creator of World of Goo
  • Hyunse Chang, Business Development Manager at Google Play
  • Lina Chen, Co-founder & CEO of Nix Hydra
  • David Edery, CEO of Spry Fox
  • Maria Essig, Partner Manager, Indies at Google Play
  • Noah Falstein, Chief Game Designer at Google
  • Dan Fiden, Chief Strategy Officer of Funplus
  • Emily Greer, CEO of Kongregate
  • Alex Lee, Producer, Program Manager, Daydream & Project Tango at Google
  • Jordan Maron, Gamer and independent YouTuber “CaptainSparklez”


We are also thrilled to announce that veteran game designer and professor
Richard Lemarchand will be the emcee for the event. He was lead designer at
Crystal Dynamics and Naughty Dog, and is now Associate Chair and Associate
Professor at the University of Southern California, School of Cinematic Arts,
Interactive Media and Games Division.



The winning developers will receive prizes, such Google Cloud credits, NVIDIA
SHIELD Android TVs and K1 tablets, Razer Forge TV bundles, and more, to
recognize their efforts.



Join us for an exciting opportunity to connect with fellow game fans, get
inspired, and celebrate the art of indie games. Learn more about the event on
the href="https://events.withgoogle.com/google-play-indie-game-festival/about/">event
website.

الثلاثاء، 2 أغسطس 2016

5 Tips to help you improve game-as-a-service monetization


Posted by Moonlit Wang, Partner Development Manager at Google Play
Games, & Tammy Levy, Director of Product for Mobile at href="http://developers.kongregate.com/">Kongregate



In today’s world of game-as-a-service on mobile, the lifetime value of a player
is a lot more complex, where revenue is now the sum of many micro transactions
instead of a single purchase with traditional console games.



Of course you don’t need a sophisticated statistical model to understand that
the more time a player invests in your game, and the more money they spend, the
greater their LTV. But how can you design and improve monetization as a mobile
game developer? Here are 5 tips to help you improve game-as-a-service
monetization, with best practice examples from mobile games publisher, href="https://play.google.com/store/apps/dev?id=7580247376460930437&hl=en_GB">Kongregate:



1. Track player behavior metrics that have a strong and positive correlation with LTV



  • D1, D7, D30 retention indicates how well a casual player
    can be converted into a committed fan.
  • Session length and frequency measures user engagement and
    how fun your game is.
  • Completion rate at important milestones can measure and
    pinpoint churn.
  • Buyer and repeated buyer conversion, represents your most
    valuable user segment.


2. Optimize for long-term engagement and delight your best players


Retention is the first metric that can distinguish great games from mediocre
ones. Games with higher retention rates throughout the user’ lifecycle, monetize
better consistently. Retention is king, and more importantly, long-term
retention should be prioritized.
Therefore, when designing your game,
aim to create a sophisticated and engaging experience to delight your most
committed fans.




[This chart shows the retention of top games / apps over time]



  • When considering long term retention, focus on achieving a strong D30, but
    also look beyond the first 30 days. Measure long term retention
    by assessing the following rates: D30 to D60, D30 to D90, and D30 to D180. The
    higher the rate, the stickier your game is in the long term, which will increase
    your LTV.
  • Players are willing to pay a fixed amount of money per hour of “fun”, so
    think about updates when designing your game, to make
    the content rich and fun for those who will play at very high levels and
    spend the most time within your game
    , don’t gate your players or hinder
    their in-game progression.
  • Use the href="http://android-developers.blogspot.com/2016/01/new-features-to-better-understand.html">Google
    Play Games Services - Funnel Report to help you track different
    milestone completion rates in your games, so you can identify drop off points
    and reduce churn
.
3. Increase buyer conversion through targeted offers


First-time buyer conversion is the most important as player churn rate
drops significantly after the first purchase
, but stays relatively flat
regardless of the amount spent. Also, past purchase behavior is the best
predictor of future purchases. Find your first-time and repeated buyer
conversion rate directly in the href="https://developer.android.com/distribute/users/user-acquisition.html">Developer
Console.




  • Use A/B testing to find the price that will maximize your total
    revenue
    . Different people have different willingness to pay for
    a given product
    and the tradeoff between price and quantity is
    different for different products, so don’t decrease prices blindly.
  • Tailor your in-game experience as well as in-app purchase offers
    based on the player’s predicted probability to spend using the href="https://developers.google.com/games/services/android/stats">Player Stats
    API,
    which
    predicts players churn and spend.



For example, in href="https://play.google.com/store/apps/developer?id=Kongregate&hl=en_GB&e=-EnableAppDetailsPageRedesign">Kongregate’s
game href="https://play.google.com/store/apps/details?id=com.kongregate.mobile.spellstone.google&hl=en_GB">Spellstone,
testing two pricing points for a promotion called Shard Bot, which provides
players with a daily “drip” of Shards (the premium currency) for 30 days, showed
players had a much stronger preference for the higher priced
pack.
The first pack, Shard Bot, priced at $4, granted players 5 daily
shards, and the second pack, the Super Shard Bot, was priced at $8 and granted
players 10 daily shards.




[Two week test results showing preference for the more expensive pack, which also generated more revenue]




Kongregate decided to keep the higher priced Super Shard Bot in the store,
although both packs resulted in very similar retention rates:





4. As well as what monetization features to implement, take into consideration why, when and how to do so




  • Why: “Buyer intent” is most important. Any item with a
    price tag should serve to enhance your players in-game experience.
    For
    example, a new map, a new power, something exciting and additional to the free
    experience. Don’t gate your players with a purchase-only item as happy users
    means more time spent with your game, which will lead to higher
    revenue. Educate users by gifting some free premium goods and currency during the tutorial, and let users experience the benefit first.



  • When: Time offers based on when users may need it.
    If your IAP is to continue gameplay after timeout, then you should surface it
    right when the timer ends. If your IAP is to offer premium equipment, then you
    should surface it when users gear up their characters. The offer should be
    contextually relevant, such that the content should cater to the player’s
    current status and needs in-game.




    In particular, Starter Packs or New Buyer Promos need to be well timed. Players
    need to understand the value and importance of all the items before they are
    shown the promotion. If surfaced too early, players will not feel compelled to
    purchase. If surfaced too late, the offer will not be compelling enough. The
    Starter Pack should appear within 3 to 5 sessions since install, depending on
    your game. Additionally, limiting its availability to 3 to 5 days will urge
    players to make a quicker purchase decision.




    For example, href="https://play.google.com/store/apps/details?id=com.kongregate.mobile.battlehand.google&hl=en&e=-EnableAppDetailsPageRedesign">BattleHand’s
    starter pack is surfaced around the 4th session, it is available for 36hrs and
    contains the following items to aid players in all areas of the game:



  • Powerful cards that have an immediate effect in battle
  • High rarity upgrade materials to upgrade your card deck
  • A generous amount of soft currency that can be used in all areas of the game
  • A generous amount of hard currency so players can purchase premium store
    items
  • Rare upgrade materials for Heroes



[Example starter pack offer in Battle Hands]


Thanks to the strength of the promotion over 50% of players choose the Starter Pack instead of the regular gems offerings:




  • How: There are many ways you can implement premium content and goods in your game, such as power-ups, characters, equipment, maps, hints, chapters etc. The two most impactful monetization designs are:


      Gacha - There are many ways to design, present and balance gacha but the key is to have randomized rewards, which allows you to sell extremely powerful items that players want without having to charge really high prices per purchase.



[Example of randomized rewards in Raid Brigade’s boxes]



      LiveOps - Limited time content on a regular cadence will also create really compelling opportunities for the players to both engage further with the game and invest in the game. For instance, Adventure Capitalist has been releasing regular limited themed time events with their spin on the permanent content, their own progression, achievements and IAP promotions.




[Example timed event for Adventure Capitalist]


Through this initiative, the game has seen regular increases in both engagement and revenue during event times without affecting the non-event periods:




[Timed events drastically increase engagement and revenue without lowering the baseline average over time]


5. Take into account local prices and pricing models



Just like different people have different willingness-to-pay, different markets have different purchasing powers.




    • Test what price points make sense for local consumers in each major market.
      Don’t just apply an umbrella discount, find the price points that maximize total
      revenue.
    • Consider charm pricing but remember it doesn’t work everywhere.
      For example, in the United States, prices always end in $x.99, but
      that’s not the case in Japan and Korea, where rounded numbers are used. Pricing
      in accordance to the local norm signals to the customers that you care and
      designed the game with them in mind. The Google Developer Console now
      automatically applies href="https://support.google.com/googleplay/android-developer/answer/6334373?hl=en&ref_topic=6075663">local
      pricing conventions of each currency for you.



href="http://android-developers.blogspot.co.uk/2016/06/android-developer-story-vietnamese.html">Check
out the Android Developer Story from games developer, Divmob, who improved
their game’s monetization threefold simply by adopting sub-dollar pricing
strategies. Also, href="https://play.google.com/store/books/details/Google_Inc_The_Building_for_Billions_Playbook_for?id=cJEjDAAAQBAJ&e=-EnableAppDetailsPageRedesign">learn
more best practices about building for billions to get more tips on
monetization.




href="https://play.google.com/store/apps/details?id=com.google.android.apps.secrets">Get
the Playbook for Developers app and stay up-to-date with more features and
best practices that will help you grow a successful business on Google Play.














الأربعاء، 1 يونيو 2016

Android Developer Story: Vietnamese games developer Divmob finds more users with localized pricing on Google Play

Posted by Lily Sheringham, Google Play team




Based in Ho Chi Minh City in Vietnam, games developer Divmob has grown quickly from an original team of five people to 40 employees since
it was founded three years ago. Divmob now has over 40 million downloads across
its various titles, including the popular game, Epic Heroes War.



Watch Ngo Van Luyen, CEO & Founder at Divmob, and his team explain how
introducing sub-dollar pricing in various markets resulted in a 300% increase
in daily transactions, and increased the number of paying users threefold.






Find out more about local pricing models on Google Play



We recently introduced new features in the Google Play Developer Console to
help you meet local expectations when setting prices, to make purchases more
attractive to your users. The Developer Console will now automatically round
pricing to local conventions in each market, and you can also set up pricing
templates to manage pricing across multiple currencies more efficiently, and
easily make bulk changes to the prices of multiple apps and in-app products in
a single click. Learn more about the improved local pricing tools.


الأربعاء، 18 نوفمبر 2015

Hungering for Game Utilities?

Posted by Alex Ames, Fun Propulsion Labs*



Originally posted to the Google Developers blog





At Fun Propulsion Labs we spend some of our time building sample games to help demonstrate how to make easy-to-build, performant, cross-platform games. With the growth of Google Cardboard, we got to work and over many long evenings, feeding our animal hunger on sushi, we came up with Zooshi. Zooshi is an open source, cross-platform game written in C++ which supports:



  • Android, Android TV, Windows, OSX, and Linux

  • Google Cardboard

  • Google Play Games Services sign-in and leaderboards on Android

  • Level customization


Zooshi serves as a demonstration of how to build Android games using a suite of newly released and updated open source game technologies from Google:



  • Motive drives our Animation system, giving life and movement to the characters and environment.

  • CORGI, the Component Oriented Reusable Game Interface, is an Entity-Component system designed to allow users to define complicated game objects as collections of modular, custom-defined behaviors.

  • FlatUI is a straightforward immediate mode GUI system with a light footprint that makes building up user interfaces a breeze.

  • Scene Lab allows designers to design levels and edit entities from right in the game without needing to use an external editor.

  • Breadboard provides an easy to use node based scripting system for editing entity behaviors that's accessible to designers without deep knowledge of programming.

  • FPLBase is a cross-platform API layer, for abstracting low-level tasks like reading input and creation of graphical contexts.


As in our previous release, Pie Noon, we also made extensive use of Flatbuffers, Mathfu, fplutil, and WebP.



You can download the game in the Play Store and the latest open source release from our GitHub page. We invite you to learn from the code to see how you can apply these libraries and utilities in your own Android games. Take advantage of our discussion list if you have any questions, and don’t forget to toss some sushi around while you’re at it!



* Fun Propulsion Labs is a team within Google that's dedicated to advancing gaming on Android and other platforms.

الجمعة، 23 أكتوبر 2015

Virtual currency: Sources and Sinks

Posted by Damien Mabin, Developer Advocate



More and more mobile games base their economic model on virtual currencies and free to play, yet there are plenty of pitfalls to be aware of while developing your game. One of these pitfalls is having an unbalanced economy. Sources and Sinks, a handy feature included in the Play Games Services toolset, is specifically designed to help measure the balance of your game’s virtual economy.



It helps you visualise in one simple diagram the state of your current in game economy. In diagram 1 (below), along the x-axis (time), and y-axis (amount of virtual currency), we see 2 curves:




  • One showing the amount of virtual currency earn by players (orange line)

  • The other one showing the amount spent by players (green line)





Diagram 1: Poorly Monetizing Economy



What do the curves in the diagram tell us? In this case, that our game is likely not going to monetize well. Users are spending less currency than they are earning: resulting in a surplus. There is no sense of scarcity for the user which may indicate that your players do not understand how they can spend currency or that there is value to them in doing so. It would be a good idea in this case to re-evaluate how much content is available to spend virtual currency on and how discoverable this content is to your users. Alternatively, you may want to consider decreasing the amount of in game earned currency is available (inflation can be a bad thing). Ultimately, you want your curves to change as demonstrated in diagram 2 (below).




Diagram 2: Balancing economy



That’s a lot better! Now your users are spending more than they earn… Wait! How is that possible? Two reasons: Players are spending the stock of money they accumulated before your changes. Moreover, there is another important point not to forget: you should not track in the above diagrams the amount of virtual currency the user purchase through in app purchases. If you wait a few more days, you should see the 2 curves converge a bit; the delta of them being the amount of virtual currency users purchase through IAP:




Diagram 3: Stabilised economy



With play game services you can get this visualisation with 2 lines of codes! It works on iOS and Android and doesn’t require the user to sign in to Play Games. What you will have in your Android or iOS app is something like this:





You can find more information about the integration here.



Once the client integration done you can go into your Play Store Developer Console to visualise the curve. Go into the “Game services” section, and click on “Player analytics->overview.”


الجمعة، 16 أكتوبر 2015

Game Performance: Vertex Array Objects

Posted by Shanee Nishry



Previously, we showed how you can use vertex layout qualifiers to increase the performance and determinism of your OpenGL application. In this post, we’ll show another useful technique that will help you produce increased performance and cleaner code when drawing objects.



Binding the vertex buffer



Before drawing onto the screen, you need to bind your vertex data (e.g. positions, normals, UVs) to the corresponding vertex shader attributes. To do that, you need to bind the vertex buffer, enable the generic vertex attribute, and use glVertexAttribPointer to describe the layout of the buffer.



Therefore, a draw call might look like this:



const GLuint ATTRIBUTE_LOCATION_POSITIONS   = 0;
const GLuint ATTRIBUTE_LOCATION_TEXTUREUV = 1;
const GLuint ATTRIBUTE_LOCATION_NORMALS = 2;

// Bind shader program, uniforms and textures
// ...

// Bind the vertex buffer
glBindBuffer( GL_ARRAY_BUFFER, vertex_buffer_object );

// Set the vertex attributes
glEnableVertexAttribArray( ATTRIBUTE_LOCATION_POSITIONS );
glVertexAttribPointer( ATTRIBUTE_LOCATION_POSITIONS, 3, GL_FLOAT, GL_FALSE, 32, 0 );

glEnableVertexAttribArray( ATTRIBUTE_LOCATION_TEXTUREUV );
glVertexAttribPointer( ATTRIBUTE_LOCATION_TEXTUREUV, 2, GL_FLOAT, GL_FALSE, 32, 12 );

glEnableVertexAttribArray( ATTRIBUTE_LOCATION_NORMALS );
glVertexAttribPointer( ATTRIBUTE_LOCATION_NORMALS, 3, GL_FLOAT, GL_FALSE, 32, 20 );

// Draw elements
glDrawElements( GL_TRIANGLES, count, GL_UNSIGNED_SHORT, 0 );


There are several reasons why we might not like this code very much. The first is that we need to cache the layout of the vertex buffer to enable and disable the right attributes before drawing. This means we are either hard-coding or saving some amount of data for a nearly meaningless task.



The second reason is performance. Having to tell the drivers which attributes to individually activate is suboptimal. It would be best if we could precompile this information and deliver it all at once.



Lastly, and purely for aesthetics, our draw call is cluttered by long boilerplate code. It would be nice to get rid of it.








Did you know there is another reason why someone might frown on this code? The code is making use of layout qualifiers which is great! But, since it’s already using OpenGL ES 3+, it would be even better if the code also used Geometry Instancing. By batching many instances of a mesh into a single draw call, you can really boost performance.




So how can we improve on the above code?



Vertex Array Objects (VAOs)



If you are using OpenGL ES 3 or higher, you should use Vertex Array Objects (or "VAOs") to store your vertex attribute state.



Using a VAO allows the drivers to compile the vertex description format for repeated use. In addition, this frees you from having to cache the vertex format needed for glVertexAttribPointer, and it also results in less per-draw boilerplate code.



Creating Vertex Array Objects



The first thing you need to do is create your VAO. This is created once per mesh, alongside the vertex buffer object and is done like this:



const GLuint ATTRIBUTE_LOCATION_POSITIONS   = 0;
const GLuint ATTRIBUTE_LOCATION_TEXTUREUV = 1;
const GLuint ATTRIBUTE_LOCATION_NORMALS = 2;

// Bind the vertex buffer object
glBindBuffer( GL_ARRAY_BUFFER, vertex_buffer_object );

// Create a VAO
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );

// Set the vertex attributes as usual
glEnableVertexAttribArray( ATTRIBUTE_LOCATION_POSITIONS );
glVertexAttribPointer( ATTRIBUTE_LOCATION_POSITIONS, 3, GL_FLOAT, GL_FALSE, 32, 0 );

glEnableVertexAttribArray( ATTRIBUTE_LOCATION_TEXTUREUV );
glVertexAttribPointer( ATTRIBUTE_LOCATION_TEXTUREUV, 2, GL_FLOAT, GL_FALSE, 32, 12 );

glEnableVertexAttribArray( ATTRIBUTE_LOCATION_NORMALS );
glVertexAttribPointer( ATTRIBUTE_LOCATION_NORMALS, 3, GL_FLOAT, GL_FALSE, 32, 20 );

// Unbind the VAO to avoid accidentally overwriting the state
// Skip this if you are confident your code will not do so
glBindVertexArray( 0 );


You have probably noticed that this is very similar to our previous code section except that we now have the addition of:



// Create a vertex array object
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );


These lines create and bind the VAO. All glEnableVertexAttribArray and glVertexAttribPointer calls after that are recorded in the currently bound VAO, and that greatly simplifies our per-draw procedure as all you need to do is use the newly created VAO.



Using the Vertex Array Object



The next time you want to draw using this mesh all you need to do is bind the VAO using glBindVertexArray.



// Bind shader program, uniforms and textures
// ...

// Bind Vertex Array Object
glBindVertexArray( vao );

// Draw elements
glDrawElements( GL_TRIANGLES, count, GL_UNSIGNED_SHORT, 0 );


You no longer need to go through all the vertex attributes. This makes your code cleaner, makes per-frame calls shorter and more efficient, and allows the drivers to optimize the binding stage to increase performance.








Did you notice we are no longer calling glBindBuffer? This is because calling glVertexAttribPointer while recording the VAO references the currently bound buffer even though the VAO does not record glBindBuffer calls on itself.



Want to learn more how to improve your game performance? Check out our Game Performance article series. If you are building on Android you might also be interested in the Android Performance Patterns.