04-08-2003, 08:12 PM
A few comments on various topics (I hope it ends up well even for thread viewers :) ).
I also have to remember to try to get it all correct since we have a D2 programmer here but if he nit to much or point out errors, I just search extra for some embarasing bug in the new patch ;)
Regarding the sending of the map and map hack. The map itself is not sent to the client. What is sent is a seed (a 32 bit value) from which the map is generated. The map is made up of smaller areas ("rooms" created one by one from the original map seed (well there is probably some intermediate seed or mid size map area too or something but that is not important). You can see the boundaries of such rooms when you lose connection with the server but remain in the game, you simply run into the black wall, that is where a "room" ends. Typically a few rooms arround your character is active at a time, and those too far away are in an inactive state and not updated.
When you get close to a new such room where you have not been yet, it will be generated "on the fly" so to speak.
Now to prevent a cheat such as map hack (and I am ONLY talking about the revealing of the map feature here, that program has many other features in it), the "trick" would be to not base the seed for each individual room on the one map seed sent for the act when the game starts as it is now, but an independant seed sent for each room as you get close to it and it needs generating for the fist time. SInce it is just one 32 bit value, it will not really add much to the over all bandwidth compared to all the data normally flowing in a game.
Do note that this is easier said than done, several core functionalities of the map generation process and how the game handle it would probably need messing with.
What the map hack cheat do is simply to run a loop calling the function in the game that generate the map for all rooms of the act (normally it will happen one at a time as your character get close only).
As for the client being told too much sure, with the way the maps are generated now, the client is aware of the full map from the start. In addition, the server will send full update about monsters and other things going on in active rooms. To get an idea of the area we talk about here, one can always fire up map hack and check it should have some feature that show monsters for example which it can only do for active areas (please do it on single player though. not on bnet if you really want to bother at all checking this) One can say this is too much info to far away from the character of course. For lag issues, the client obviously need to know info of stuff SOME distance outside your screen. As the game works (in its core functionality), I would say it can only be done on a room to room basis, not in smaller steps. So it would not easilly be possible to say "lets send updated info only on stuff slightly closer to the character".
As for the "no-cd" hack. I personally don't think that would be something possible to detect on the servers. Unless Blizzard have added some self checking code to what is on your computer that communicate back to the server, it would be something not changing anything from the bnet point of view. Don't take my word for it though. I have never bothered mesing or looking at the communication between server and client and similar subjects. Obviously there is some way to detect some things on the servers that people thought was not possible. As a bold guess, I would say it is probably some form of analyzing the messages that is recieved from the client and "comparing" to what would normally be possible by the client if you played normally (normally meaning with no cheats and such). Even if all messages sent by a bot for example are valid in in themselves correct, the pattern and ways they are sent together could be ways that the game would never do it. A silly made up example (I really have not much knowledge of it :) ), would be sending two types of messages after each other, both of which can and are normally sent by the game itself, but for example never one after eac other. Oh well, lets move to something else... :)
I also have to remember to try to get it all correct since we have a D2 programmer here but if he nit to much or point out errors, I just search extra for some embarasing bug in the new patch ;)
Regarding the sending of the map and map hack. The map itself is not sent to the client. What is sent is a seed (a 32 bit value) from which the map is generated. The map is made up of smaller areas ("rooms" created one by one from the original map seed (well there is probably some intermediate seed or mid size map area too or something but that is not important). You can see the boundaries of such rooms when you lose connection with the server but remain in the game, you simply run into the black wall, that is where a "room" ends. Typically a few rooms arround your character is active at a time, and those too far away are in an inactive state and not updated.
When you get close to a new such room where you have not been yet, it will be generated "on the fly" so to speak.
Now to prevent a cheat such as map hack (and I am ONLY talking about the revealing of the map feature here, that program has many other features in it), the "trick" would be to not base the seed for each individual room on the one map seed sent for the act when the game starts as it is now, but an independant seed sent for each room as you get close to it and it needs generating for the fist time. SInce it is just one 32 bit value, it will not really add much to the over all bandwidth compared to all the data normally flowing in a game.
Do note that this is easier said than done, several core functionalities of the map generation process and how the game handle it would probably need messing with.
What the map hack cheat do is simply to run a loop calling the function in the game that generate the map for all rooms of the act (normally it will happen one at a time as your character get close only).
As for the client being told too much sure, with the way the maps are generated now, the client is aware of the full map from the start. In addition, the server will send full update about monsters and other things going on in active rooms. To get an idea of the area we talk about here, one can always fire up map hack and check it should have some feature that show monsters for example which it can only do for active areas (please do it on single player though. not on bnet if you really want to bother at all checking this) One can say this is too much info to far away from the character of course. For lag issues, the client obviously need to know info of stuff SOME distance outside your screen. As the game works (in its core functionality), I would say it can only be done on a room to room basis, not in smaller steps. So it would not easilly be possible to say "lets send updated info only on stuff slightly closer to the character".
As for the "no-cd" hack. I personally don't think that would be something possible to detect on the servers. Unless Blizzard have added some self checking code to what is on your computer that communicate back to the server, it would be something not changing anything from the bnet point of view. Don't take my word for it though. I have never bothered mesing or looking at the communication between server and client and similar subjects. Obviously there is some way to detect some things on the servers that people thought was not possible. As a bold guess, I would say it is probably some form of analyzing the messages that is recieved from the client and "comparing" to what would normally be possible by the client if you played normally (normally meaning with no cheats and such). Even if all messages sent by a bot for example are valid in in themselves correct, the pattern and ways they are sent together could be ways that the game would never do it. A silly made up example (I really have not much knowledge of it :) ), would be sending two types of messages after each other, both of which can and are normally sent by the game itself, but for example never one after eac other. Oh well, lets move to something else... :)
There are three types of people in the world. Those who can count and those who can't.