Great stuff Nikolay. So I am curious, what sort of features for a service like ScoreLoop are sought after by developers? I mean, if a service offers a gamer profile capability, is that somethng that a lot of game developers would make use of, especially if the service works across different platforms that the game developer may target? I would think the ability to have a user "log in" to a profile that allows them to keep track of all games they play, scores, achievements would be nice to have. With services like ScoreLoop and OpenFeignt (although both target iPhone still, ScoreLoop has some sort of SDK for Android but it's not readily accessible from their site like the iPhone SDK is), why would you not use them, being free, over say rolling your own? If they offer a simple "high scores", as well as a user profile/gamer tag, and possibly things like downloadable content managment, micro-transaction processing for in-game addons/goods, what deters a game developer from using them? Is it the complexity of the API? Having to depend on a SDK from the service provider?
On Wed, Mar 24, 2010 at 2:05 PM, Nikolay Ananiev <[email protected]>wrote: > > > On Wed, Mar 24, 2010 at 7:48 PM, Kevin Duffey <[email protected]> wrote: > >> Hey Nikolay.. didn't realize you were the author of Bebbled. Great game. I >> play that one a lot too. I need your source tho.. I am stuck on a level and >> I want to modify it so I can beat it. :D >> > > Check this thread: > http://androidforums.com/android-games/10387-multibubbles.html > > >> >> As for sending game moves..that's interesting, but I agree with Justin >> that it seems quite overly complex/clunky for most games, to handle a high >> score. With encryption and SSL, why not just go that route? I don't know if >> you are selling Bebbled..I have a free version, but it's such a good game I >> can't imagine you're not making decent money from it. Is it the cost of the >> certificate and such that you decided to avoid using SSL, for example? I am >> not trying to be nosy.. I am trying to understand what/why you did what you >> did. I've not heard of anyone sending game moves and storing all of that to >> avoid a cheating high score. I would have thought with sha-1 salted hash or >> something, or SSL, you could avoid any cheating going on. As someone else >> posted, the chances of someone really trying to cheat are probably so >> limited.. I mean you're not giving out money for high scores or any sort of >> reward. >> >> > SSL doesn't prevent cheating. It just prevents man-in-the-middle attacks, > which is unrelated. Encryption doesn't prevent cheating either. It's easy to > decompile the class files in an .apk and see how to encrypt the data. Then > just send whatever encrypted data you want via SSL and the sever will accept > it. Of course, my approach is not bullet-proof too. I can't tell if the > player on the other end of the socket is a very clever human or a well > written bot, but it's a bit harder to cheat when you have to follow the game > rules strictly instead of just submitting false results. > > > >> As for social aspects, I've not looked, but I thought Facebook, twitter, >> and such had REST based APIs, where you basically get some developer key, >> and then can call the APIs to connect to them. Maybe I am wrong on this.. >> but I've seen a few posts about this fb-connect library, and wondering why, >> if there is a REST-like interface, you need a kit for it? Maybe there isn't >> a rest-like interface. I thought there was tho. >> >> > Yes, it's a REST api most of the time, but in order to use it you have to > ask the user to login, ask him to give you permissions, etc. This happens > with special facebook dialogs, which load directly from Facebook.com inside > WebViews. Implementing my own library would have taken me a lot of time and > that's why I used the unofficial fb-connect for Android. > > >> Justin, the web view you mention, why not just make a call to the server >> to pull the high score data down, and format it directly into the game with >> a view? I am curious why you went that route? I think you said you have a >> website where players can check high scores, so you're reusing it.. but even >> so, I mean.. in my mind, if you're good enough with Android to make a game, >> making a server call to get some high scores and display it in a view would >> be easy to do. Just curious why you chose this method instead of what I am >> asking? >> >> OAuth.. it's quite interesting.. I've found it a bit difficult to figure >> out how to use it tho. I want to use it for services on the server side.. it >> seems I have to provide several keys or something to the client using the >> service with oauth. While it seems to be the new industry heavyweight for >> authentication and everyone is adopting it, I get confused with the >> two-legged and three-legged methods for service calls. I know the >> three-legged is great if I want my friend to access my stuff that otherwise >> they could not. But when I put up a web service and want to allow a client >> to access it, seems the two-legged approach is fine..yet I forget now but >> read that three-legged is better for this.. but it seems more complex to >> explain to clients on how to use it as well. Ugh! >> >> >> > It's confusing, indeed. Just use the Signpost library if your app is going > to be a "consumer". It has nice examples and the developer is a guy, who > writes high-quality code. > > >> >> On Tue, Mar 23, 2010 at 10:55 AM, Nikolay Ananiev <[email protected]>wrote: >> >>> Well, it's more expensive to use the web view, because all the html that >>> you transmit over the network is redundant and the server traffic cost goes >>> up. >>> What I don't want to do is to pay to support a free game. That's why I >>> made my own binary protocol, which is very efficient - loads the data very >>> fast and the bandwidth cost is very low. >>> For example, last month I had only 4GB of traffic, which costs me $0.61 >>> with amazon aws. >>> >>> Implementing the social features in Bebbled was not hard. The hard part >>> was to make the current facebook-connect library ( >>> http://code.google.com/p/fbconnect-android/) work. It's not an official >>> one and it's a direct port of the iPhone version. It has many bugs and >>> issues with threading, but I managed somehow to make it work for me. I even >>> returned some patches to the maintainer, but he hasn't responded yet. >>> >>> As for twitter, I didn't find a "Sign in with Twitter" library for >>> android. There's even no such library for iPhone. I created this from >>> scratch using a great OAuth client implementation ( >>> http://code.google.com/p/oauth-signpost/). I'm thinking to release this >>> code as an opensource project as soon as I have the time. >>> >>> >>> On Tue, Mar 23, 2010 at 3:01 PM, Justin Giles <[email protected]> wrote: >>> >>>> Nikolay, >>>> >>>> First of all, kudos to a great game! It's one of the few that I go back >>>> to over and over again. >>>> >>>> Back to your post: >>>> Great ideas here! Your online scores idea is great for decreasing the >>>> amount of cheating to almost 0. However it seems like it has a lot of >>>> overhead to recreate someones game. Maybe not. I guess it just depends on >>>> how much logic you have to go through to recreate the game. And, in a lot >>>> of games, this approach wouldn't work very well, or could become clunky. >>>> But, for you game it seems to be working great. >>>> >>>> In regards to not showing the online scores in game, why not use a >>>> webview on your activity to pull in a "mobile" formatted webpage with the >>>> scores? That's how I pull in the online scores for my app and, sure, it >>>> takes a few seconds to load the webview into an activity, but it's >>>> something >>>> like 1 second for an activity to load versus 3-5 seconds for the activity >>>> with a webview to load. You also bypass having to dump out to the browser >>>> to do this. >>>> >>>> In regards to the social aspects you recently implemented (facebook, >>>> etc.)...was that much work to do? I've been thinking about adding these >>>> types of features into my app as well. I'm only at the exploratory phase >>>> currently though. I'm not entirely sure what all I'll be getting into >>>> there. >>>> >>>> Justin >>>> >>>> On Tue, Mar 23, 2010 at 2:39 AM, Nikolay Ananiev >>>> <[email protected]>wrote: >>>> >>>>> On Wed, Mar 17, 2010 at 2:08 AM, Kevin Duffey <[email protected]>wrote: >>>>> >>>>>> Hey all, >>>>>> >>>>>> I am curious how the various groups of game developers, primarily >>>>>> mobile (android in this case) and cross-platform >>>>>> (android/iPhone/facebook) >>>>>> handle storing high scores, achievements, and such as well as how multi >>>>>> player is done. >>>>>> >>>>> >>>>> How does your game(s) access high scores, update the list, remove them >>>>>> if need be? The same would apply for achievements, and to a lesser >>>>>> degree, >>>>>> leader boards. >>>>>> >>>>> >>>>> Are you using a service out there that you pay for... if so how much >>>>>> does it cost.. and do they provide some sort of java/objective-c SDK that >>>>>> you can just plug in to your code? >>>>>> >>>>>> How do you dispaly high scores, leader boards, achievements, etc in >>>>>> your game? Do you provide your own web site with the same info, perhaps >>>>>> jazzed up a bit more or with more detail than your mobile game (due to >>>>>> limited screen realestate for mobile devices)? Do you provide a link to a >>>>>> web site in your game if they want to see things like high scores, >>>>>> achievements and leader boards? >>>>>> >>>>>> >>>>> >>>>> >>>>> My game has a custom view to show the high scores in the game. I didn't >>>>> like the web browser approach, because it gets the player out of the game, >>>>> completely changes the UI he is used to and the loading time is terrible. >>>>> The user experience is really bad this way. I have two high scores in the >>>>> game - local and online. The local high scores are stored in a SQLite >>>>> database and the remote are in PostgresSQL. I also show the high scores on >>>>> the website and on a Facebook application. The difference between the 3 >>>>> types: The in-game high scores do not support searching (I just don't have >>>>> the visual space to put a search input field, which I want). The website >>>>> ranking supports searching, but otherwise is the same like the in-game >>>>> one. >>>>> The Facebook one is interesting. If you log-in the game using facebook >>>>> connect, your facebook id is saved and this allows me to show a specific >>>>> ranking based on you and your facebook friends, show their pictures, link >>>>> to >>>>> their profiles and so on. >>>>> >>>>> >>>>> How do I send the scores to the server? I don't. That's how I prevent >>>>> cheating. What I do is to send the player moves to the server and the >>>>> server >>>>> replays the game using the player moves. Checks if every move is according >>>>> to the game rules and validates the game. If the game is valid, the server >>>>> just extracts the scores out of its state and saves them. There are no >>>>> high >>>>> scores send over the network. >>>>> >>>>> >>>>> >>>>> I would also like to know what sort of things are most important for >>>>>> your games. High scores are so yesterday, so to speak. The latest craze >>>>>> in >>>>>> most games seems to be achievements and the ability to obtain extra items >>>>>> for your games, either by buying them, or earning them through >>>>>> achievements, >>>>>> etc. So what are some things you game developers would want to make use >>>>>> of >>>>>> in your game to add more appeal to your game, to draw in players for >>>>>> longer, >>>>>> especially long enough to pass the 48 hour refund time so that you can >>>>>> actually earn some money from your hard work. I look at games on Facebook >>>>>> like Farmville that are doing so well they are hiring more developers at >>>>>> good pay to work on it. I also look at games like World of Warcraft, >>>>>> which I >>>>>> play and got sucked into for a while, due to getting to that next level >>>>>> or >>>>>> getting that next awesome epic gear piece... those sorts of things seem >>>>>> to >>>>>> be what draws in players to otherwise simple games. A number of mobile >>>>>> games >>>>>> that seem to do very well often seem to be fairly simple games but offer >>>>>> that right mix of "I just got to get to that next...". I am curious what >>>>>> some of you developers have found work for games either those that you >>>>>> played, or are working on (or have written) that draw in players. This >>>>>> leads >>>>>> to the next paragraph.. making a living on game development ultimately >>>>>> requires that your game does well and that people pay for it in some >>>>>> manner >>>>>> and not refund it. Hence why I am trying to understand what it is that >>>>>> those >>>>>> otherwise simple games seem to do that draw in the masses. >>>>>> >>>>>> >>>>> >>>>> I'm currently working on a real-time multiplayer. You will be able to >>>>> play against other players from around the world. I will add an option for >>>>> bluetooth challenges later. I'd like to add achievements, but that would >>>>> be >>>>> after the multiplayer. >>>>> >>>>> >>>>> >>>>>> Which brings about another topic.. how do games like Farmville make so >>>>>> much money being free games, that they can have a company behind it? I >>>>>> can't >>>>>> believe ads on the stie alone make up for all their revenue. I've been >>>>>> considering looking at ads in the game as opposed to charging for it, and >>>>>> that seems like players might keep a game longer than if they pay for it >>>>>> and >>>>>> then refund it within 48 hours if they don't absolutely love the game... >>>>>> although I am not entirely sure how much it annoys players to have a >>>>>> small >>>>>> portion of the screen saved for ads as opposed to just buying it. >>>>>> >>>>>> >>>>> >>>>> Farmville makes little money from ads compared to the money they make >>>>> from selling virtual goods. Last thing I remember was that they released a >>>>> new flower and made $800,000 in a single day. And I personally hate ads. >>>>> My >>>>> game doesn't have ads and it's free. >>>>> >>>>> >>>>> >>>>>> Lastly, multi-player. I am curious how games work multi-player. The >>>>>> only way I can think of is the client (game) has to update a server of >>>>>> some >>>>>> data, a move, location of a sprite, etc, and at the same time has to poll >>>>>> the server often enough to update the game screen to keep things working. >>>>>> The first part of this, the game side, seems easy enough.. at least to >>>>>> some >>>>>> degree.. when your player makes a move, you send a server request to some >>>>>> server with the data, be it their new location, a weapon they selected, >>>>>> etc. >>>>>> The second part of this is the client polling the server often enough, >>>>>> fast >>>>>> enough, to keep things smoothly on the screen of all players. So how have >>>>>> some of you handled this and yet keep the game playing smooth as well? >>>>>> Probably more important is, the server side. Not necessarily the code >>>>>> bit of >>>>>> it, but how do you handle if your game takes off and you get 10s of >>>>>> thousands of players playing it... what sort of server side technology is >>>>>> used to handle that many requests, that fast, fast enough to allow all >>>>>> those >>>>>> game clients to provide a smooth game experience while keeping the >>>>>> multi-player working solid as well? >>>>>> >>>>>> Thank you. I look forward to learning more about how these things are >>>>>> done in games. >>>>>> >>>>>> >>>>> >>>>> Server polling is always a BAD idea for games, especially for real-time >>>>> games. You have to go lower in the newtwork stack and directly use >>>>> sockets. >>>>> If you use low-level sockets you can keep the connection to the server >>>>> opened all the time and this way you can push information and the server >>>>> can >>>>> push information back to you and there is no need for polling. That's how >>>>> multiplayer gaming usually works. >>>>> >>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Android Developers" group. >>>>> To post to this group, send email to >>>>> [email protected] >>>>> To unsubscribe from this group, send email to >>>>> [email protected]<android-developers%[email protected]> >>>>> For more options, visit this group at >>>>> http://groups.google.com/group/android-developers?hl=en >>>>> >>>>> To unsubscribe from this group, send email to android-developers+ >>>>> unsubscribegooglegroups.com or reply to this email with the words >>>>> "REMOVE ME" as the subject. >>>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Android Developers" group. >>>> To post to this group, send email to >>>> [email protected] >>>> To unsubscribe from this group, send email to >>>> [email protected]<android-developers%[email protected]> >>>> For more options, visit this group at >>>> http://groups.google.com/group/android-developers?hl=en >>>> >>>> To unsubscribe from this group, send email to android-developers+ >>>> unsubscribegooglegroups.com or reply to this email with the words >>>> "REMOVE ME" as the subject. >>>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Android Developers" group. >>> To post to this group, send email to [email protected] >>> To unsubscribe from this group, send email to >>> [email protected]<android-developers%[email protected]> >>> For more options, visit this group at >>> http://groups.google.com/group/android-developers?hl=en >>> >>> To unsubscribe from this group, send email to android-developers+ >>> unsubscribegooglegroups.com or reply to this email with the words >>> "REMOVE ME" as the subject. >>> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected]<android-developers%[email protected]> >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en >> >> To unsubscribe from this group, send email to android-developers+ >> unsubscribegooglegroups.com or reply to this email with the words "REMOVE >> ME" as the subject. >> > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<android-developers%[email protected]> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > > To unsubscribe from this group, send email to android-developers+ > unsubscribegooglegroups.com or reply to this email with the words "REMOVE > ME" as the subject. > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en To unsubscribe from this group, send email to android-developers+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.

