I have documented all the Player Attributes + Team Bonuses + Hot/Cold Code in the SNES rom. Below are the details.
Overall very similar except for the rescaled attribute values and the HUGE Hot/Cold bug on the SNES side.
Genesis / SNES Comparison:
Player Attribute Details:
Bonuses / Disadvantages:
· PP + : Positive (0 to +3) Applied to the team on the PP
· PK - : Negative (-3 to 0) Applied to the team on the PK
· Home/Away +/-: Negative or Positive (-3 to +3) based on your teams Home/Road
· Rubber Band +: Positive +2 applied when losing or tied early in the third or in OT
Goalies: Do not get Bonuses / Disadvantages applied to their attributes, only Hot/Cold.
Hot/Cold function:
1) Takes a random number (-12 to +12) divides by 2 then divides by 2 again.
2) Adds this number back to the rescaled value.
3) Constraints the attribute to stay within the 0 to 15 range.
Hot/Cold Bug:
A division error on the (-12 to +12) causes HUGE fluctuations in SNES, often resulting in large positive jumps.
I would say this is similar to the GENS weight bug, in terms of being a coding error
Example of the Bug:
1.Starting Values:
- Benoit Brunet's agility was originally 2 out of 6.
- This value was rescaled to 5 out of 15. No bonuses were applied.
2.Random Number Impact:
- A random number of $F5 (-11 in decimal) was generated to adjust agility due to "Hot/Cold" status.
- This number should be halved (divided by 2) twice in the calculation.
3. First Division by 2:
- Instead of correctly calculating -11 ÷ 2 = -5, the instruction treats the number as if it’s positive (unsigned), which gives a wrong result of 245 ÷ 2 = 122.
4.Second Division by 2:
- The incorrect value 122 is halved again to get 61.
- This should have instead halved -5 to get -2.
5.Adding the Original Agility Value:
- The program adds the original rescaled value of 5 to the incorrect 61, resulting in 66.
- The correct calculation should have been 5 + (-2) = 3.
6.Capping the Result:
- Since 66 is greater than the maximum allowed agility of 15, the value is capped at 15.
- In the correct calculation, the final agility value would have been 3, which is already under the cap.
**Summary:**
Due to the bug, Benoit Brunet's agility incorrectly increases to the maximum value (15) instead of decreasing to (3) as it should, because the negative number was mistakenly treated as a positive number during the calculations.