Bomb Jack (set1) TERRIBLE bug ?!?!
We had a great time in our "RetroCampus - Arcade Division" stand at Model Expo - Verona (Italy) yesterday and today.
The "topic" moment of the event should have been a new Francesco Romeo performance at Bomb Jack, aimed at overcoming his own world record !
Francesco wanted to get 99,999,990 points to see if the counter stop and/or "rolls" and then permanently archive the game which is his favourite since 1984 (favourite, yes... along with Nibbler, in which he had already made one billion points in the 1985, and many, many other) !
He began his game (PC + MameWOLF 0.106, TG tournament "marathon" settings") at 3:30 pm and his and my predictions had calculated about 24 hours to get to those fateful "one hundred millions".
At about 2.30am he was at 11 hours of play, piled up a significant number of extra lives, although he stopped a few times to go to the bathroom (this time he could not count on the fact that the event was "reserved" as happened in our previous event in which he had played his 75 millions game) and reached more than 46 millions ...
!!! WELL, !!! please watch the clip to see when the game kinda ' "crashed" !!!
( I recorded the clip with my phone while we were watching the .inp playback )
Francesco gained an extra life grabbing the "E" and he lost a life immediatley after... then probably the life counter received a "+1" for catching an extra in the exact moment while it was also receiving the "-1" for losing one...
Probably these two things done at the same time were not foreseen by the program so the game did not know pretty much what to do and went to "game over" !!!
... at least, this was 'my' analysis of the facts and also some other much more experienced than me in terms of informatics and programming...
Could it be so?
Or do you think there's something else?
Is it happened to any of you to come across this bug at Bomb Jack ?
Last edited by MAC; 03-13-2017 at 12:10 AM.
Oh man what a way for a game to be over. I don't know enough about this game but could he have rolled the lives counter.
Yep, it could be the same bug which also affect Nibbler's lives counter.
We do not know how many lives he had in that moment, but it happened he lost 2 lives BEFORE the scene in the clip, so in theory we should rule out that way.
And so we think it's more probably due to the contemporaneus +1 and -1 in the count which caused the "crash"...
Last edited by MAC; 03-13-2017 at 01:18 AM.
Got the first response from a friend who had just analyzed Bomb Jack's program with a debugger...
... and here we are !
It's clear !!!
The lives counter, even in this case as in Nibbler and in many other games of that era, is a single byte.
There are "unsigned" and "signed" values.
In the first 4 bits reflect the value represented exactly: 1111.1111 (FF in hexadecimal) is therefore 255.
then the representable values ranging from 0 to 255.
In the seconds 4 bits the left-most bit is used to indicate the positive or negative sign of the number:
in this case 1111.1111 (FF) represents the -1.
This means that the values are represented by 1000.0000 (80),
or -128 to 0111.1111 (7F), or 127
So, what happens, then ?
When you get to 127 (0111.1111) lives and you earns another, counter don't go at 128, but at -128 (1000.0000) !
So far, it's not a problem if you lose a life at this time: the binary operation that is made is
1000.0000 - 1 = 0111.111 which is 127, again.
However, if you earn another life, the count becomes -127 (1000.0001).
Losing a life at this time in the game it will be -128 (1000.0001 - 1) lives that are less than zero
and then the game will give the "Game Over", exactly as happened to Francesco !
How could it be solved ?
... never exceeding 127 lives!
Or when you get to 128 you got to earn 128 more lives without ever losing one, but it seems a bit 'complicated...
I did some tests with the debugger and I am sure of anything !
I'll soon make a video in the next few days where I try to explain it all...