A quick few thoughts that I have been batting back and forward as I work on my HTML5/JS MMO-ish Roguelike client.
As a basic introduction or recap, the client obtains current map data and basic information via AJAX, and then lets the player move around looking at things without needing to talk to the server, until either
(a) the PC moves out of the current map region and so needs a new map;
(b) the PC hits a "hotspot", which is a square that requires a server update. The client isn't told _why_ the hotspot is hot;
(c) the player performs an action that needs a server update, such as using an object;
(d) or an idle time limit is reached of a few seconds, and every minute or so of idleness after that.
(I quite quickly abandoned the idea of light and vision masks - that means that every step the player makes means having to ask for an update, and on a phone, that is a bit catastrophic; it's even annoying on the desktop with broadband.)
Whenever the client syncs with the server, it sends a list of all of the moves the player has made. The server calculates the outcomes and sends back an entirely new game environment (a very small amount of data) - so it is practically impossible to cheat. If you send impossible moves, the server will ignore them and send back a game state on that basis, and anything involving random factors is calculated server-side.
( Yes, it gets worse. )
On the other hand, there have been lots of diverting games in the past which had pretty limited NPC movement on the map. Some had none at all (e.g. The Bard's Tale just had random encounters and some ones fixed to map points).
As a basic introduction or recap, the client obtains current map data and basic information via AJAX, and then lets the player move around looking at things without needing to talk to the server, until either
(a) the PC moves out of the current map region and so needs a new map;
(b) the PC hits a "hotspot", which is a square that requires a server update. The client isn't told _why_ the hotspot is hot;
(c) the player performs an action that needs a server update, such as using an object;
(d) or an idle time limit is reached of a few seconds, and every minute or so of idleness after that.
(I quite quickly abandoned the idea of light and vision masks - that means that every step the player makes means having to ask for an update, and on a phone, that is a bit catastrophic; it's even annoying on the desktop with broadband.)
Whenever the client syncs with the server, it sends a list of all of the moves the player has made. The server calculates the outcomes and sends back an entirely new game environment (a very small amount of data) - so it is practically impossible to cheat. If you send impossible moves, the server will ignore them and send back a game state on that basis, and anything involving random factors is calculated server-side.
( Yes, it gets worse. )
On the other hand, there have been lots of diverting games in the past which had pretty limited NPC movement on the map. Some had none at all (e.g. The Bard's Tale just had random encounters and some ones fixed to map points).