Discussion: An Xbox Live like system for Pandora [split from other topic]


an open-source score board system in open-source games is going to be a complete waste of time.


think about it.

Perhaps require the software to have been compiled with a verification code - then anyone can modify the source, but only people with the verification codes (server admins, game developers) would be able to submit scores. Maybe assign a verification code to each game so even devs can't cheat unless its their own game.


If you wanted to modify the game, you could get a code for a sandbox scoreboard, then get a real one when the game is ready.
 
You can do all the crypto you want, but in the end it's always a race between the server admin and the cheaters. (EDIT: for open source, I mean, since you can't get security through obscurity)


The best way for the high scores IMO would be to generate a token for each client, then get the server to cryptographically sign that token. All high score submissions must contain such signed token. If misbehavior is detected, all the high scores with the same token are deleted. The server would only allow X active tokens per IP, so getting too many would at least be cumbersome.


Of course this solution has holes too, but at least there's some penalty in misbehavior and some work in trying to cheat.
 
Last edited by a moderator:
You can do all the crypto you want, but in the end it's always a race between the server admin and the cheaters. (EDIT: for open source, I mean, since you can't get security through obscurity)


The best way for the high scores IMO would be to generate a token for each client, then get the server to cryptographically sign that token. All high score submissions must contain such signed token. If misbehavior is detected, all the high scores with the same token are deleted. The server would only allow X active tokens per IP, so getting too many would at least be cumbersome.


Of course this solution has holes too, but at least there's some penalty in misbehavior and some work in trying to cheat.
even if we cryptographically sign the officially compiled executable and data, its easy enough to build another executable with the same compiler (gcc) and version, do a diff, and then locate the official cryptographic key(s).


there is 1 solution that prevents 99.999% of the cheating on high-scores without any crypto, allowing open source leaderboard.


but its quite complicated to implement without causing false negatives and it has 1 single flaw.


you have the game send the whole replay log to the server, the server replays the game and confirm the high score.


this means the server has to have the EXACT SAME rounding errors as the client, all the math functions need to produce the same result, etc.


getting that part right is quite difficult but can be done.


the flaw is cheaters will use the same trick as with speedruns: hack the input log and iteratively artificially create the perfect game run.


that in itself makes for an interesting competition, but still voids the concept of a highscore leaderboard.


one way to make it work is to only have "group of friends" private leaderboards because:


1) you can ban cheaters easily


2) you can kick the cheater in the crotch the next time you see the jerk IRL


kidding aside, it only takes 1 jackass to ruin the party for everybody else.


anyone who works on a lobby/leaderboard system has to keep this in mind, not as an after-thought or else the whole thing will be completely worthless.
 
You misunderstood a bit. The signing key would never be on the client, only on the server. Each client gets a unique signed token (it could generate the unsigned one itself, maybe) from the server, which is used when submitting data. Thus there's no way short of a break-in to create disposable tokens yourself . All records made with a token are deleted if misuse is detected, and token distribution is monitored (same way multiple accounts on the forums are).


EDIT: Also, as I said this is not bulletproof either, but does impose sanctions on caught cheaters and make it a little more troublesome to do. Better than nothing, still quite easy to implement.
 
Last edited by a moderator:
I wonder: Could the repo be upgraded with that?


I haven't checked what XMPP can do, but I think at least highscore submission shouldn't be too hard using the repo.


The developer could create a PGP key, one part included on the server (can be submitted together with the program on the repo), one part included in the program.


This could be used for setting up a secured connection between the program and server for submission.


True, if anybody wanted to, he could recompile the game to cheat... but I really doubt that would happen a lot.


First, the Pandora community is no "I wanna be the best so I cheat"-community, secondly, not everyone would be able to recompile the game to cheat... and to cheat, the person interested in doing so would need to recompile, how big is the chance that this really happens?


And IF it happens, we could remove the account.


I think including this in the repo would be cool, because...


* ... the developer could the key on the repo


* ... the repo user accounts could be used for playing


* ... the repo could even show highscore lists on the details page of each program :)


milkshake, what do you think of that?


We'd need to


* ... define a standard for the submission (and release code snippets to include that for the devs)


* ... code that :)


That would only be score submission, which shouldn't be too hard to do and it would rock for games like Super Geometry Wars or Vektar.


I would love it. I don't really like stuff like that on the 3DS or other systems, as there are soo many users, but with such a small userbase as the Pandora has, it's basically like you know the guys you fight against :)


The second step would be multiplayer online gaming.


This is probably more complex, but I think the basic system should be like:


* The game connects to the server (my server), telling name and version of the game.


* The server sends all available users who want to play that game online back to the clients.


* The user selects against whom he wants to play, the other sides accept and then the game sets up the multiplayer game (after that is done, the server won't be needed anymore).


What do you think about that?


I can provide the server, but I can't code :)


Any team that wants to take the task?


For repo inclusion, I guess milkshake is needed ;)
 
For finding games and ingame chat, maybe an IRC server could be used? Should be possible to connect IRC auth to the repo accounts?
 
I think including this in the repo would be cool, because...
Idea is great, but wouldn't it be better if this would be a seperate site that shares the user database with the repo ?

Well, it would be the same server ;)


So whether it's included in the repo or just a separate site using the same database would basically be the same ;)


Though I think it would be neat if the highscores could be show on the repo for the program as well.


Imagine being at work, checking the repo and finding out that someone stole your highscore... then play the game on the bus, beat the highscore again and submit it later via WiFi when you're at home :)
 
I don't like highscore tables, they show me how bad i am. ;)


How about leagues? Or another way to select the players i would like to compare/contest?


This could be done by reduced local versions of the highscore database server.
 
Last edited by a moderator:
I agree with thatgui, I would prefer a separate site too, mainly because of the following reasons:

  • repo.openpandora.org is already bloated, even without additional functionality (not feature-wise, but at least markup-wise (and probably code-wise, too, though that's a guess))
  • KISS and the Unix philosophy in general(!)
  • repo.openpandora.org is still not open source (or am I not up to date on this?)



Any repositories can still communicate with the highscore site even if it is dedicated.


--


As for the cheater problem, the "friend group"-only highscores mentioned by Stephane are a good thing that should be implemented in any case, but it would be a pity if a global highscore system was missing. Basically, B-ZaR went into the right direction: we have to find ways to get to know the people behind a highscores-site account.


Here are some random ideas (what are yours?): Linking highscore accounts to forum accounts. Creating a web of trust.


------------------------------------------------------------------------

True, if anybody wanted to, he could recompile the game to cheat... but I really doubt that would happen a lot.


First, the Pandora community is no "I wanna be the best so I cheat"-community, secondly, not everyone would be able to recompile the game to cheat... [...]


[...]


I don't really like stuff like that on the 3DS or other systems, as there are soo many users, but with such a small userbase as the Pandora has, it's basically like you know the guys you fight against :)
This might (or might not) be true now, but don't forget that the future may be very different.
 
Last edited by a moderator:
I agree that a seperate site would be better for a number of reasons, not least of which is that adding extra functionality (e.g. moving from HS tables ot a full-blown multiplayer system or whatever) would be easier if you do not have to battle against the constraints of an existing site.


Also,

Implementing the kaillera client for some emulators could be nice too.


http://www.kaillera.com/


There's already plenty of hardcore gamers on it.
Kaillera is closed-source and unfortunately a dying legend because the owner is not doing anything with it. I remember a few years ago I offered to purchase it, but his asking price was way too high for me to fund.
 
(disclaimer: I have never actually done anything with XMPP. All references to features are based on what I've read about it and my knowledge of the surrounding technologies)


I see a few distinct specification tasks here:

  • Game integration - how the system works with games to initiate multiplayer, submit high scores and possibly in-game chat
  • Lobby / chat / presence - how players find games, make friend lists and communicate
  • Highscores / leaderboards - how highscores are submitted and anti-cheating mechanisms


All of these are tied together by the protocol(s) used in the system. My initial suggestion was like this:



Code:
[ Game ]---[ Client library ]----[ XMPP library ]--- (internet) ---[ XMPP server ]---[ High score agent ]---[ High score database ]---[ Web site? ]


All functionality is exposed to the game through a client library, so the game doesn't really need to care how the system works after that. By using XMPP we get the network library and server for free, with support for lobby (implemented as game-specific chat rooms and one for general conversation), contacts, friend lists, presence, proxied connections and whatnot.


If we use the same database as the repo, we can scratch the database part off as done. So what we are left with component wise are the client library and high score agent. The high score agent would basically be a special contact (a bot in IRC terms) on the XMPP server that receives entries from clients, verifies them (somehow :D ) and persists them for later queries from clients.


The hardest part I see here is specifying the required extended XMPP messages that we would use to query/signal game hostings, IP contact information exchange for starting games, highscore submissions and the like. Also depending on the level of verification we want for the high scores that could be some work too. Most other functionality is provided by XMPP client library and server.


Slaeshjag suggested IRC as the communication protocol, which has similar perks. It's also more network efficient as it's a simple protocol as opposed to XMPP's XML based one. It doesn't have some of XMPP's features like friend lists, multi-person IM chats, presence (besides an away message) and proxy support, so these would be needed to be implemented to the client library and some bot. I vote for XMPP because of the lower developer overhead with more features :) . The XML data overhead should not be THAT much given the small amount of information that's actually transmitted.


Basically I'd love there to be a middle ground here. Some efficient extendable protocol with ready and mature server/client implementations that would provide XBL feature set. So far haven't heard of one.


The biggest challenges I see here are not technical, but the availability of human resources. We don't want the system to be either 1) half-assed, 2) "almost ready", 3) ready by 2017. For this we need to concentrate developer time to our special needs and use proven and mature components where we can.


I'm open for options :)
 
Last edited by a moderator:
Might be useful if the server could keep track of a set of values for each game instance - as sending full sets of absolute values for complex games would be a waste of resources, but you would need to be able to recover after a network glitch.
 
Score information should also be allowed to update at a later time.


Senario


- playing game get new high score - no wifi- score not saved to leader board


- on connect to wifi/internet game will then upload scores to server


having to be connected while playing the game would be a pain the arse!


just my two cent


Ed kinda mentioned it already
 
Let the system grow, 2000 pandora owners don't need a full xbox-live system. Start with something simple and extend it with need. We can do that just now!


chat would be the most important part. for the start, a single, dedicated chatroom that gets some promotion should be enough.


if that doesn't fit any more, game-specific rooms on our own server would be a win. if we had our own ejabberd with a shared roster, that would be pure luxury.


in a semi-final step, specific chat-ids could be defined in pnd and used by a minimal chat-client in the pandora-button-menu discussed last week.


automatic connections would be the ice on the cake.


best way to deal with highscores is sending gaming logs. suspicious scores can be checked that way. no fuzzy encryption needed and cheaters can be proven cheaters.
 
Last edited by a moderator:
If we got a high scores board, we could start up a pandora only tournament like ROTT from GP32x. Tying the scores to this forum is a great idea, it makes people accountable and also gives them forum bragging rights. We wanted forum badges at gp32x in the ROTT days but never got that far, perhaps they could happen here? If this does get off the ground I'd be more than willing to help with the managing of a new ROTT league/sub forum. It was a lot of fun when ROTT was going, having a tournament makes playing old games a new experience. As far as cheating goes, at ROTT it was never really a problem, as ED said, it's the community we are talking about and most people are honest enough and cheaters could be ostracized :)
 
Last edited by a moderator:
best way to deal with highscores is sending gaming logs. suspicious scores can be checked that way. no fuzzy encryption needed and cheaters can be proven cheaters.

yeah, I suggested that too, but the difficulty is this can create a lot of false alarms due to rounding errors such as DNZ with NEON vs VFP vs x87 vs SSE if not done properly.


the log checker needs to be tolerant of reasonable rounding errors.
 
I hope that this idea of online scores will not became invasive in games... If there's something I don't like in last years games is the:


GAME: "ERROR !! I can't put your score online !! THIS IS BAAD !! DO YOU WANT TO TRY AGAIN ? YES/NO"


ME: "NO... and I never asked you to do it..."


GAME: "OK, I'm trying again... searching a way to submit... maybe I'll save the score so I can send them at the first internet connection ? YES/NO"


ME: "NO"


GAME: "ARE YOU SURE YOU DON'T WANT TO PUT YOUR SCORE ONLINE ? YES/NO"


ME: "YES, and, can you disable forever this feature for me ?"

HAL: I'm sorry, Dave. I'm afraid I can't do that.


Dave Bowman: What's the problem?


HAL: I think you know what the problem is just as well as I do.


Dave Bowman: What are you talking about, HAL?


HAL: This mission is too important for me to allow you to jeopardize it.


Dave Bowman: I don't know what you're talking about, HAL.


HAL: I know that you and Frank were planning to disconnect me, and I'm afraid that's something I cannot allow to happen.

I am mostly a single-player, and even if I like the idea of a way to find players for multiplay, I prefere to do it when I want to... I don't like at all the way services like Steam or Xbox live works...


just my 2 cents
 
Last edited by a moderator:
Back
Top