Diablo 2 / Old School Runescape client/server theory.

Hey everyone,

Me and a friend are developing a small multiplayer game with similar features to both Diablo 2 and Old School Runescape (osrs). We have been working on the project for a few weeks and have a working client/server implementation. At first we wanted to make a Zelda: A Link To The Past type multiplayer game. After doing some research and playing about 20-30 online games we have found some features that we think would make a great game. That being said, we changed our decision to make a Zelda type game to something more of the style of Diablo 2 and OSRS.

Now, we are new to making multiplayer games and we do have some concerns about cheating. Obviously cheating ruins the fun and economy of games. I personally believe that their is no full-proof way to stop it, but we would like to prevent the most basic of cheats (faster run speeds, walking through walls, etc).

Here is a video of a little test we made. The test video does not show the inclusion of interpolation. So please forgive the movement jitter. Also this video was recorded before we decided to go with a tile/node based game.

kHNX_80H9us

Now on to some questions, this is where we need the most help. Our goal is to have roughly 600 (or more if possible) players on a server at one time. Also this is a point and click game. You point to an area on the map, and the player moves to it using A*. We would like to include diagonal movement in our path finding. Oh and this is a 2D top-down game.

To prevent cheating:

  • For player movement, should A* be implemented on the server or client?
  • For NPC/Follower/Pet movement, should A* be ran on the server or client?
  • For Quest Giver (NPC) random walking around, this is obviously A* on server or predefined walking paths?

Originally the idea was to do player movement with A* on the client. Send the desired cords to the server, as the client ran through tiles, we send the x,y cord to the server. The server says if a tile can be passed through or not. If not, stop the player on the client from running. That was our beginning theory. Not sure if we are on the right track. If anyone else has experience with this type of client/server architecture, please share your experience. It has been difficult finding data on this subject, so any help is appreciated!