Hi John:
Thanks for the detailed discussion on where you think multiplayer should go. I'll respond to your last post first just because it's simpler for me.
First of all, I went ahead and just sent you the code, so you can see how things work on your own...
Secondly, you say that "any change that occurs in a game will need to be communicated"... I'm assuming that you have read my post of 05-04-2001 00:53 above, and basically agree with it. If not, please look at over and tell me what you agree with and disagree, because I look at that post as a high-level view of what we are trying to do in terms of multiplayer design. One of the things in there is that each client's copy of the game world does not necessarily have the correct or complete information. So clients, and the players associated with them, shouldn't IMO be sent every change, only those that the player would know about. I think this approach is important because Clash as designed is a very data-heavy game, and not having to send every little change along every turn will help a lot with bandwidth for MP. Also, because the player does not have absolutely perfect information on the game world, it reduces the players benefit from micromanaging things to a ridiculous degree. We can discuss this further, but I wanted to bring up this important point and make sure you and others were aware of it ASAP.
I think you're setting up a CVS repository would be great. Gary has spoken about doing the same thing, but I'm not sure how far he's gotten with it. Can you start a new thread on "CVS Repository" or some such for you guys to discuss it and work out details?
Now, on to my comments about your much larger previous post:
I'm in substantial agreement with you on many of the details, so I'll only say something when responding to a question of yours, or wanting to put forward a point of view of my own. By way of a disclaimer right upfront, I've never done any network programming, so on the technical side my knowledge is limited.
I have to say that the Econ model is not terribly event-driven. But that said, there will typically only be a few interface elements where the player actually issues orders that will need to be modified for the benefit of the MP code. So the player's economic activity will simply generate a stream of orders that can either be immediately sent to the server by your listener, or can be stored, and sent when the end-of-turn action is processed by each player/client.
I think your proposal about the server handling all the AIs except those associated with player civs is pretty good, but might potentially lead to some problems. For instance, in a timed MP game, unless the serving computer is vastly better than all the others, the player with the server computer could be put at a disadvantage because their computer is called upon to do a lot more. Giving them less clocks to be used for their own civ's AI. Or, alternatively, if the server computer has the same amount of time to think as everyone else's then there would need to be a substantial amount of time when each turn ends that the server computer needs to use to think up strategies for all the AIs. That perhaps-substantial lag could be annoying to the players. I don't know that your approach isn't the best anyway, but these are some initial thoughts we may want to consider when we decide how to chop up which AI is done where.
IMO we only need to use serialization support when so many things in an object change at once that it's more efficient to send the whole object than to perform a few updates of object parameters. So I basically agree with your point, but think there may be exceptions where we need serialization.
Thanks for being willing to take a stab at this, and I'm looking forward to seeing this area make progress!
Thanks for the detailed discussion on where you think multiplayer should go. I'll respond to your last post first just because it's simpler for me.
First of all, I went ahead and just sent you the code, so you can see how things work on your own...
Secondly, you say that "any change that occurs in a game will need to be communicated"... I'm assuming that you have read my post of 05-04-2001 00:53 above, and basically agree with it. If not, please look at over and tell me what you agree with and disagree, because I look at that post as a high-level view of what we are trying to do in terms of multiplayer design. One of the things in there is that each client's copy of the game world does not necessarily have the correct or complete information. So clients, and the players associated with them, shouldn't IMO be sent every change, only those that the player would know about. I think this approach is important because Clash as designed is a very data-heavy game, and not having to send every little change along every turn will help a lot with bandwidth for MP. Also, because the player does not have absolutely perfect information on the game world, it reduces the players benefit from micromanaging things to a ridiculous degree. We can discuss this further, but I wanted to bring up this important point and make sure you and others were aware of it ASAP.
I think you're setting up a CVS repository would be great. Gary has spoken about doing the same thing, but I'm not sure how far he's gotten with it. Can you start a new thread on "CVS Repository" or some such for you guys to discuss it and work out details?
Now, on to my comments about your much larger previous post:
I'm in substantial agreement with you on many of the details, so I'll only say something when responding to a question of yours, or wanting to put forward a point of view of my own. By way of a disclaimer right upfront, I've never done any network programming, so on the technical side my knowledge is limited.
I have to say that the Econ model is not terribly event-driven. But that said, there will typically only be a few interface elements where the player actually issues orders that will need to be modified for the benefit of the MP code. So the player's economic activity will simply generate a stream of orders that can either be immediately sent to the server by your listener, or can be stored, and sent when the end-of-turn action is processed by each player/client.
I think your proposal about the server handling all the AIs except those associated with player civs is pretty good, but might potentially lead to some problems. For instance, in a timed MP game, unless the serving computer is vastly better than all the others, the player with the server computer could be put at a disadvantage because their computer is called upon to do a lot more. Giving them less clocks to be used for their own civ's AI. Or, alternatively, if the server computer has the same amount of time to think as everyone else's then there would need to be a substantial amount of time when each turn ends that the server computer needs to use to think up strategies for all the AIs. That perhaps-substantial lag could be annoying to the players. I don't know that your approach isn't the best anyway, but these are some initial thoughts we may want to consider when we decide how to chop up which AI is done where.
IMO we only need to use serialization support when so many things in an object change at once that it's more efficient to send the whole object than to perform a few updates of object parameters. So I basically agree with your point, but think there may be exceptions where we need serialization.
Thanks for being willing to take a stab at this, and I'm looking forward to seeing this area make progress!
Comment