This is a Quake II updated version that was created exclusively to Q2A Blood Culture community. A clan of friends which I'm the leader and creator, where we play just for fun together since 2000 with Quake II in LANs and in 2005 went to online life with Quake II Evolved. Quake II Evolved Blood Culture was created from the original source of Quake II Evolved created by Team Blur.
The Siamese Twins Bug was fixed with Q2E Blood Culture! Know more about how this almost impossible mission never done before was made.
Posted by Hajas on May 16th, 2013
Advanced Server Side Coding.
But what the hell is the Siamese Twins Bug? In the Rocket Arena 2 MOD which we play almost the time, all players are spawned at the same time on the map, so in some maps 2 or more players are spawned together at the same spawn like were merged together... they can shot, look around, but can't move... so they simply will die fast and will not play that round, and probally his team will lose that round too. Which is very annoying to the gameplay.
Siamese Twins Bug Info
1. Doesn't have relation with Spawn Points available
2. Not occur in any official map, RA2 maps inclued
3. Only occur in Custom Maps, but not in all
4. In some maps happen sometimes
5. In others all the time, unplayable
6. While never occur in many of them too
7. Ultra Rare in DM/TDM/CTF (Spawn aren't together)
At first I thought was a problem with the RA2 MOD, but with all that info seams a problem with the maps, and not really with RA2. So that's was my first step trying to understand why this was happenning all the time, making impossilbe to play RA2 in half of our maps (around 800).
Convinced that is in fact a mapping problem, I went to Maric's forums, my fave map maker which also have thousands of maps with this problem, to ask which was the difference between few of his maps that work, and others that didn't work. But for my luck (WTH!) his was travelling on that time, and never replied me, but few other users tried to help me in many forums, and after many diverse and crazy explanations, came a user named as snake and told me about the SpawnPads of the buggy maps are hidden where in the others they are at default.
WTH! Since we play with RA2, all spawnpads are removed from the maps automaticaly by the MOD, so I never thought about it. So sounds that's the way that I need to fix this bug, and I ask my friendAssassino to make 3 test maps to me while I was working with the other features, then I'll really test if this is really what cause the bug. So I asked a small box with 4 Spawnpoints, one map with them at default, another with them at the same level of the floor, and the last one with them buried on the floor, completely hidden.
Then I started a RA2 sever with 6 players aside the only 4 Spawnpoints available.
Map Tests Results
Default Spawnpoints = Never Happens
Floor Level Spawnpoints = Happen Sometimes
Buried Spawnpoints = Happens All the Time
Great! Now I know what causes the bug then the question now is how to fix that. The first thing that came to my mind was Spawn the players a little above where the Spawnpoints are in fact, then in theory this will be fixed. I found the code part about that, and the result was perfect, the players started to spawn above the spawnpoint. But this part of code is only available and controlled server side, and since I don't had the source of RA2, this will only fix the bug in DM/TDM/CTF gametypes, and not at RA2, where this bug happens a lot more.
Well, now I know what causes the bug, how to fix it, but I can't fix it because I don't had the source code of RA2. I tryed many times contact David Wright (RA2 Creator) to get the source to fix that, or at least point to him where to change one single line of the code, recompile, and send me back... but I was all the time ignored.
Aside all that bad things, many people over the internet was saying to quit because is impossible. But I simply refused to quit, and start to trying to find another way to do it... and after talking with r1chfrom the famous R1Q2 client/server, he told me that have a feature called Override that is possible to replace the objects, change or exchange them via his script.
It's great! but isn't what I really need, because with that I'll need to create a override file to any buggy map that we have, and there's almost 1000 of them, aside copy all their structure to my Q2Eversion. So isn't a good way to follow. But this give me the idea of doing the manipulation of that sameMapStringthat came with all data from the maps when the maps are beeing loaded, where the code is inside theEXE file, not the DLL like the spawn which I can't reach because don't have the source.
So what I need to do is read that string, find the spawn entities copying it to another string, add +15 to his X axis then replace the entity at the original one. Then in the end of MapString we will have all theSpawnpoints a little above his X axis point. Was a hell to do that with perfection, without abort and without damage the Maps which already was working. But I did it, and solved 99% of the chances to happen this bug again with RA2.
That manipulation will only occur when the gametype is RA2 and the spawn_fix var is 1. So you can turn on/off easily via console. Also will never do this over RA2 maps, the only way to avoid that was search for the "arena" substring at the MapString. But this left a chance that you have a map called something with "arena" in his name that aren't a RA2 map, then will not be possible to turn onspawn_fix on that map. Then I created the var spawn_or (default = 0), which if have the value 1, will make the manipulation anyway, doesn't matter if is or not a RA2 map. Then works great!
From our more than 1700 maps that we play, in less than 10 of them, sometimes in 1 or 2Spawnpointsare still happening the bug, because these Spawnpoints are more low than the amount that I add to theX axis. But I can't push more up the players without they spawn with their heads glued on the top ceiling, if this ceiling is really low... so that's why my fix don't work to 100% of cases. I'm already listing all of them, and maybe I will add an extra code to treat these exceptions one day, but for now my objetive was reached.