I am attempting a few things here... to make the game harder and to make this awful score calculator sane. I will now document how the submarine game calculates your score:
Breakdown of Submarine Scorer
Starting 007932f9
mov eax,[ebp-0C] : Move Current points from non destroyed submarines to eax
add eax,[edx+10]: Add points from Non Destroyed Submarines. This will loop until
all submarines have been added to ebp-0c. When this is done, the loop will
terminate and move on to
mov edx,[00E981CC]: Move value into edx. This value is the total points of all
submarines active or destroyed. It is therefore the total points of all the
submarines combined.
sub edx,[ebp-0C]: Subtract the non destroyed submarines points from the total
points of all submarines. Therefore, the more submarines you destroy, the better
your score. If you destroy no submarines, edx will now be 0.
mov [ebp-04],edx
mov eax,[ebp-04] : Move edx into eax.
add eax,[00987348]: add the value of the energy your submarine had left.
The original value is 4000h, meaning if you survived the game with all your
energy intact 16384 points will be added. This also means that even if you
do nothing in the minigame you will gain 16384 points.
mov [ebp-04],eax
mov ecx,[ebp-04]: Move eax to ecx
add ecx,[00E74770]: Move value of the time you had left.
This value is seconds*60. For example, if you finished the minigame
with 5 minutes remaining, you would gain 18000 points (5*60*60).
mov [ebp-04],ecx : Move ecx to ebp-04
mov edx,[00EC7AA0]: Move value into edx. This value is a punishment value.
When locked on, for every missile missed, this value is incremented by 1.
imul edx,edx,64: Multiply the punishment value above by 100
(to make the number significant). This means for every missile missed
when locked on, you lose 100 points.
mov eax,[ebp-04]: Move the current points you have
before the action above into eax.
sub eax,edx: Subtract the punishment value from your total score.
mov [ebp-04],eax: Place score into ebp-04. This is your final score.
To simplify the above for you:
Score= (total_submarine_points - Total_non-destroyed_Submarine_points)
+ Energy_Remaining [max 16384] + (Time_remaining_seconds*60) - (Number_of_Missiles_missed*100).
The whole thing is ridiculous really. Rather than a simple score structure, they have made this a convoluted mess. Having the energy value as 4000h instead of just 40h is a joke to begin with... and then factor in time having such a large value, each sub having various points which are deducted at the end if you havent destroyed them, coupled with this punishment value... and you have a mess.
Note. Each submarine has its own points allocation from a table. Therefore the game adds these all up to arrive at [00E981CC]. It does the same with any Non-destroyed submarines to arrive at the other value. Because of this, each difficulty has a wide variance in maximum theoretical points (due to different submarines being used and different counts)... and it isn't a very logical difference either.
The missed missile counter is unfair and unworkable really.. if you have a sub that needs 4 missiles to destroy it, the first 3 may hit and you may fire another 3. 2 of these will be deemed to have missed.