I know I'm going to get a whole bunch of flames for this post, perhaps along the lines of:
"If you don't like it, don't play it" (But I do like it, but I also like voicing my opinion...)
"Think you could do better idiot?!" (If I had the time, perhaps...)
"Upgrade your hardware f00l!" (I have good hardware, but please read...)
But anyway, on to the nitty gritty.
As a software engineer, I find it hard to believe that this game requires 1gb of memory, regardless of what the recommendations are on the box. Ask any good game programmer what one of the most difficult tasks in writing game software is, as they will inevitably mention that of resource management. In laymans terms, that is the ability for the software to detect what textures/sounds/animations it needs at any one time and to bring them in (and here's the key point) before they are needed and not dispose of them when they're still needed, whilst still providing an emmersive, lag-free environment. Many games have achieved this in less than 1gb of memory, yet BF2 struggles. I wonder why.
My forte is not in 3D programming, even if I have an understanding of the mechanics and the engineering behind it. There's no doubt that the BF2 engine is impressive. It does the job, with good effect and (usually) at a decent frame rate, but I truely believe that it achieves that on a "fat" basis, without being smart. It requires high-end hardware because the engineers couldn't (or wouldn't, perhaps) spend the time to make it efficient. If you know better, then please correct me, but I believe that the 3D engine is a hog because it's not very good. Pretty, yes. Effective, also. Intelligent? Dumb as a brick.
Now, let us go on to networking. I've done a few game networking protocols in my time, the principles stay the same (in a nutshell, keep everybody updated with as little information as possible whilst staying flexible)... but what concerns me the most is the server browser... "Why do you pick on such a small item?!", I hear you cry. Notice it freeze when you click on a server? That little spinning "2" icon?
One of the GOLDEN rules of network programming, is that you do not do your network processing on the same thread as the user-interface. Otherwise you'll get a clunk-clunk experience, as is displayed by the BF2 browser. It was thrown together in a couple of days, I'm serious. It's not difficult to do asynchronous socket programming, and I hope to hell their actual in-game network programming isn't using a synchronous model, but sometimes I wonder, but that might just be me.
The reason you don't do this is simple. Whilst the network library is resolving hostnames, getting information, it doesn't happen straight away in the blink of an eye (according to the software). Good engineers put this on a different thread, use I/O completion ports or (even worse, but still better) windows messages to determine when these operations are completed. Using this method, your browser remains interactive and responsive.
bad engineers could respond with "But, what if the user clicks on another server whilst you're collecting data on the first one they clicked on!? huh?"... again, it's down to good design patterns. They exist, they're not that hard...
EA/DICE do have a good product. I had to rant a little because they've evidently not thought about some principles that a commercial game in this day and age, should really be exhibiting.
Rant off, I'm waiting for the flames, and I'll respond as best I can. Peace out :)
"If you don't like it, don't play it" (But I do like it, but I also like voicing my opinion...)
"Think you could do better idiot?!" (If I had the time, perhaps...)
"Upgrade your hardware f00l!" (I have good hardware, but please read...)
But anyway, on to the nitty gritty.
As a software engineer, I find it hard to believe that this game requires 1gb of memory, regardless of what the recommendations are on the box. Ask any good game programmer what one of the most difficult tasks in writing game software is, as they will inevitably mention that of resource management. In laymans terms, that is the ability for the software to detect what textures/sounds/animations it needs at any one time and to bring them in (and here's the key point) before they are needed and not dispose of them when they're still needed, whilst still providing an emmersive, lag-free environment. Many games have achieved this in less than 1gb of memory, yet BF2 struggles. I wonder why.
My forte is not in 3D programming, even if I have an understanding of the mechanics and the engineering behind it. There's no doubt that the BF2 engine is impressive. It does the job, with good effect and (usually) at a decent frame rate, but I truely believe that it achieves that on a "fat" basis, without being smart. It requires high-end hardware because the engineers couldn't (or wouldn't, perhaps) spend the time to make it efficient. If you know better, then please correct me, but I believe that the 3D engine is a hog because it's not very good. Pretty, yes. Effective, also. Intelligent? Dumb as a brick.
Now, let us go on to networking. I've done a few game networking protocols in my time, the principles stay the same (in a nutshell, keep everybody updated with as little information as possible whilst staying flexible)... but what concerns me the most is the server browser... "Why do you pick on such a small item?!", I hear you cry. Notice it freeze when you click on a server? That little spinning "2" icon?
One of the GOLDEN rules of network programming, is that you do not do your network processing on the same thread as the user-interface. Otherwise you'll get a clunk-clunk experience, as is displayed by the BF2 browser. It was thrown together in a couple of days, I'm serious. It's not difficult to do asynchronous socket programming, and I hope to hell their actual in-game network programming isn't using a synchronous model, but sometimes I wonder, but that might just be me.
The reason you don't do this is simple. Whilst the network library is resolving hostnames, getting information, it doesn't happen straight away in the blink of an eye (according to the software). Good engineers put this on a different thread, use I/O completion ports or (even worse, but still better) windows messages to determine when these operations are completed. Using this method, your browser remains interactive and responsive.
bad engineers could respond with "But, what if the user clicks on another server whilst you're collecting data on the first one they clicked on!? huh?"... again, it's down to good design patterns. They exist, they're not that hard...
EA/DICE do have a good product. I had to rant a little because they've evidently not thought about some principles that a commercial game in this day and age, should really be exhibiting.
Rant off, I'm waiting for the flames, and I'll respond as best I can. Peace out :)
Comment