From the ground up, I’ve designed Mox with the desire to provide a secure gaming environment. The basic way that the server-client relationship works in Mox is through replication. Objects existing on the server (cards, players, etc…) and their properties are replicated on each client. All clients then see the same game 🙂
Given that architecture, one could think of a couple of ways to ‘cheat’:
- One might first think that he could modify his client-side view of the game. You could, for example, give yourself 666 life, or ensure the card you want is at the top of your library. There are a couple of problems with this technique. First, the server and the other players won’t be aware of your changes, which means that other players will still see your correct life, etc.. Basically, you’ve accomplished nothing. Second, when the server tries to update your view of the game, there will most likely be a synchronization error (the server won’t find what it expects), resulting in disconnection. So, as you see, this form of cheating is pretty easy to prevent when you use a trusted server (of course, if the cheater has access to the server, he can do whatever he wants…).
- The second form of cheating is a bit more subtle and happens when a player gets access to more information than he should normally have. For example, seeing the other player’s hand. If we implement the server-client architecture as discussed above, this is immediately possible since all clients have the same, complete view of the game. We therefore need some buffering between the server and the client. The server has to control exactly what information gets sent to each client. This way, the client will, for example, know that the other player has 7 cards in his hand, but cannot know the identity of the cards.
So I’ve been working on the second part of this mechanism (hiding stuff from the client’s view) during the past week. I had most of the features I needed to implement it, but still, things are often harder than they seem 🙂
Oh, and by the way, don’t think that this solves all cheating problems.. I can still think of some ways for a client to cheat, and I don’t know exactly how to forbid them all 😛 We’ll see how that goes!