This version is very good. As much as it is very close to the original game, it still misses few things or has them customized in a way that I don’t find to be the exact way on how they should function.
Lately I was going through sourcecode a bit to change few things here and there and putting a server online to see how they work hoping to not break the compatibility with the client. And that C++ code sure is hard to get through all the connections just to write a few things there.
I can say that modifying AI is pretty much doable at the server side alone without the need to recompile the client as well as getting rid of max players limit (in case somebody wondered, the 2nd even in assembler). I was not so lucky digging into common part to try fixing the Laser for it to work like in the original. Unfortunately that would require new client recompilation, for which anything other than official, I guess, has no point to see the light…
Nonetheless in the original, laser would hit only one target and the damage gets reduced by the distance and be overall weaker/shorter when less power is used (this part is partially working alright). As far as I tried (dirty) coding it in, it seems to work OK on server side but the client knows its own ways on how it should work and it breaks the synchronization (ghost players, wrong HP etc).
Other bug with Laser is that if You for example set minimumhurt to 10 and maximumhurt to 200 then this part of code breaks:
which clearly evaluates to something below 0 for max power making the client skip the animation altogether, even though the server, when fixed, can clearly try to draw it. I think this part should just assign MaximumHurt * (powerused / 1000) to it then later in the code should re-evaluate the damage with something like: damage_ – ((drawLength_ / length_) * damage_) when the target is found and stop the laser afterwards (not target multiple of them, could be left for heavy laser instead). It should as well target shields (or as per original game, only if they are on the way of laser, if they are covered by ground, target tank directly – though that part may not be necessary as this was always a bit of cheating and may not be that easy to program) – which is as easy as changing 6th parameter to TargetDamage::damageTarget in
Laser::simulate… then again, that won’t work if the client doesn’t have it set exactly the same way.
Other than that Plasma Blast could be cool, as well as Earth Disrupter (in case we can suspend gravitation – which I didn’t test). Of course they are not so useful but if we have trackers implemented, then why not. Guidances are also not in but yeah those may be not that easy to add without changing a bit more projectile logic. Contact Triggers maybe also? But then again I don’t think tunneling works here, does it?
Anyway, very cool game and thanks for making it real, brings back memories. 🙂