In Game Bonuses to Player Attributes

Recommended Posts

We know for certain that, in the game, each player has a base value between 0-6 for each of their skill attributes (weight is a number given in a 0-15 scale). But, as many of you have noticed, there will be games where a player feels "off" or "hot". That is because the game adds some "bonuses" to these base values, to give them and the team a more "realistic" feel. I was looking at the game code to see if I could minimize them, when I came across some new findings.

Some of these topics have already been covered in other threads, but I'll rehash them quickly. Special thanks to @smozoma and @kingraph for their help with this.

Before we go over bonuses, I want to cover how the game uses the player attributes:

Weight (Wgt) - Used to determine who wins a check. It also has an affect on how fast a player can get up to speed.

Agility (Agl) - Think of this as acceleration. A higher number means the player reaches top speed sooner. This may also have an effect on the turning ability.

Speed (Spd) - Think of this as the top speed of a player when skating.

Offensive Awareness (OfA) - We aren't sure of the awarenesses completely, but smoz thinks it's related to how large of a radius a player can "see". If the puck is in this area, the player will go for the puck. Also, it seems to determine where the player sets up in the offensive zone.

Defensive Awareness (DfA) - See above, but setting up in the defensive zone. These two seem to feed off each other. If the ratio is close to 1 (like 4/4 awareness), they don't seem to excel in one awareness or the other.

Shot Power (ShP) - Puck velocity from a shot, and also possibly how fast a player releases the puck.

Shot Accuracy (ShA) - How accurate the shot is.

Stick Handling (StH) - Dangle ability. Affects turning, deking, and how well a player holds onto the puck when taking a check (Toddle ability).

Passing (Pas) - Not entirely sure on this, but how well a player can complete a pass, and how well a player can receive a pass ? Also, might have an effect with pass velocity.

Roughness (Rgh) - Not entirely sure, but smoz I believe figured out this is Pass/Shot Bias for CPU players. The higher the number, the more they shoot instead of passing.

Endurance (End) - Stamina, effective when using line changes.

Aggression (Agr) - Not sure, but this may determine how aggressive a player is to chasing the puck carrier.

Checking (Chk) - This seems to determine how often a CPU player initiates a check. Might be tied to Aggression.

Handedness (Hnd) and Fighting (Fgt) - If the number is even, the player is L, if it is odd, the player is R. The rest of the value is a fighting value, which may not be used in 94.


The above are rated on a scale of 0-6 (except for Weight and Fighting, which is 0-15).

What you see in the edit lines is not entirely true (this is even with smozROMs edit lines fix). The base attributes are as follows:

0 = 25

1 = 34

2 = 43  

3 = 54  (3 * 18)

4 = 72  (4 * 18)

5 = 90  (5 * 18) 

6 = 108 (6 * 18)  (displayed as 99 on Genesis, and 100 on SNES in the Team Roster/Edit Lines pages)


Weight Ratings (in lbs.):

1 = 148
2 = 156
3 = 164
4 = 172
5 = 180
6 = 188
7 = 196
8 = 204
9 = 212
10 = 220
11 = 228
12 = 236
13 = 244
14 = 252


These are displayed values, but not the values used by the game. So while these values may have some meaning to you, there's really MUCH less variation than you think. 


The game takes the 0-6 value, multiplies it by 5, and stores that value. The max value any attribute, regardless of any added bonuses, is 30 (or 1E in Hex). So, a player with a 6 rating at an attribute, can never be hotter (6 * 5 = 30, the max), but they can be colder. Also, a player with a 0 rating on an attribute, cannot be colder, only hotter. After this calculation, the In-Game Bonuses are added.

NOTE: Awareness values are calculated in-game much differently. While all other attributes, the higher the in-game value, the better, the Awareness works opposite (the lower the in-game value the better). Don't think about this now, I will show more later.

For an example, we will use Jeremy Roenick's Shot Accuracy. It is a default 5 value. His rated value is 90, but his in-game value is 5 * 5 = 25.


NOTE: These were tested with Genesis, but I'm guessing it's the same for SNES.

In-Game Bonuses:

The game does a check every faceoff, and applies these bonuses as needed to the on-ice players only.

Hot/Cold Bonus - A single random bonus is applied to EVERY attribute (except Weight and Fighting). This is a bug, as the game actually generates a random bonus for EACH of a player's attribute, to make it more "variable", but ends up only using the first value for all the attributes.  @smozomacovers this in his smozROM hack, which can fix this bug, or remove the random bonus entirely. The bonus is a -3 to a +2 bonus on the IN GAME VALUE. 

Ex: Jeremy Roenick has a 5 for Shot Accuracy. His default in game value (before bonuses) is 5 * 5 = 25. This game, his hot/cold bonus is -2. So, this changes his ShA to 25 - 2 = 23. You can also think of it as he now has a 4.6 ShA instead of a 5 (each point of bonus = 0.2).

From a ratings standpoint, this would vary the base rating from -9 to +8 (in-game values of -3 - +2). I will go over the ratings screen later on.


Team Bonus - This is applied to OfA, DfA, StH, ShA, and Pas. The Team Bonus value is usually on a scale from 0 to 3, and there is a separate bonus for Home and Away.

The Home bonus is a positive bonus, and applied to the Home Team. So the higher the value, the better.

The Away bonus is a negative bonus, and applied to the Away Team. So the lower the value, the better (0 is best).

Ex: JR's current ShA is a 23 value. CHI is playing at Home this game, so he gets the Home Bonus (CHI Home Bonus is 2). So, his new ShA is 23 + 2 = 25.


Team PP Bonus - This is applied to OfA, StH, ShA, Pas. The PP Bonus is on a scale from 0 to 3. It is a positive bonus.

Ex: JR's current ShA is 25. CHI goes on the PP. The Team PP Bonus is 0 (more on that in a moment). So, his ShA does not change in this case.


Team PK Bonus - This is applied to OfA, StH, ShA. The PP Bonus is on a scale from 0 to 3. It is a negative bonus.

Ex: JR's current ShA is 25. CHI goes on the PK. The Team PK Bonus is 1 (more on that in a moment). So, his ShA goes from 25 to 25 - 1 = 24



- Remember I said the bonuses are applied at every faceoff? The PP and PK bonuses are supposed to be applied at the opening faceoff of the PP. But, they are not! They are applied ON THE NEXT FACEOFF DURING THE PP. And, once these are applied, they will continue to be applied even after the PP is done, until the next faceoff. 

- Also, we have been wrong about the PP/PK byte. I believe this is a bug. For example, Boston has a 2-1 PP-PK Team bonus, according to what we know about the Team Byte Data. But, the game actually uses the second digit (1) as the PP bonus, and the first digit (2) as the PK bonus! So, in reality it's a 2-1 PK-PP bonus. A team like ANH has a value of 02, which would mean no PK bonus (which is good, a 0 change), and a +2 (or think of it like a 0.4 point increase to the original attribute) increase to OfA, Pas, and StH during a PP!


Comeback Bonus - This is a new finding (and has a bug). Beginning at the start of the 3rd period, at each faceoff, the game will check the score and see if there is a tie, or a lead. It then applies a +2 bonus to OfA, Chk, and a +4 bonus to Rgh. This mostly benefits the CPU players, as Chk and Rgh increases more than OfA (again, because of the way it's calculated). This bonus is applied to BOTH teams if there is a tie, and to the LOSING team if applicable. It also is applied for the whole OT (to both teams). So what this means is CPU controlled players become more aggressive with checking, and if you are playing 1 player, the CPU team will take more shots. The OfA bonus helps those who have lower OfA (not so much with 5 and 6 rated players), to sit in better spots for one-timers and rebounds.

Roughness (Passing Bias) is a hidden stat. It doesn't show up on the ratings screen. JR has a 2 Rgh rating or a 2 * 5 = 10 in-game value. Which means he passes more than he shoots (controlled by CPU). This bonus would bump him up to 14 in-game value.



- The Comeback bonus does a check at each faceoff, not just looking at the score of the game, but also the time remaining (in the 3rd period only this is checked). If there is a faceoff with less than 2:30 remaining, it REMOVES the bonus. I think they intended to only apply this bonus with less than 2:30 remaining in the 3rd, but they messed up. So imagine losing in a 10 min period game, where you would have at least 7:30 of bonus over your opponent. You can thank this bug.


PLAYER RATINGS - Warning, this will get a little complicated

You are used to seeing player attributes on the Edit Lines and Team Roster screens in a 0-99 or a 0-100 scale. But, the game really sees them in a 0-30 scale, like what was shown above. So, there is much less variance in the game than what you see on the ratings screen.

Remember I said the ratings Hot/Cold values were -9 to +8? Yes, this is the displayed ratings variance, but the in-game variance is really -3 to +2. So, what does this mean?

Example: JR has a 5 ShA. This game, his hot/cold is -7. His ShA rating display would be 5 * 18 = 72, and then 72 - 7 = 65. 

His in-game value is 25 (5 * 5 = 25). The game takes that -7, divides it by 3, and dumps the remainder (-7 % 3 = -2). Then, adds it to his in-game value, so 25 + -2 = 23.

But, what if his hot/cold bonus was -8? The ratings display would be 72-8 = 64. His starting in game value is 25, then -8 % 3 = -2. So, 25 + - 2 = 23. So even though his hot/cold bonus changed, it didn't effect his in-game value (the value the game actually uses).

So you can look at all the In-Game Bonus (Hot/Cold, Team, PP/PK, Comeback) as so, with the effect on the 0-100 rating scale -

-3 (-9 through -11 rating change)

-2 (-8 through -6 rating change)

-1 (-5 through -3 rating change)

 0 (-3 through +2 rating change)

+1 (+3 through +5 rating change)

+2 (+6 through +8 rating change)

+3 (+9 through + 11 rating change)

+4 (+12 through +14 rating change) 

Even though there's a variance in the ratings, I believe it's just for display purposes. The in-game value uses the values in bold. Also, the Edit Lines and Team Roster ratings displayed DO NOT show any of the Team Bonuses, just the default rating + the hot/cold bonus. 

The lesson here is the Edit Lines and Team Rosters never show you the exact rating for an attribute.



Offensive and Defensive Awareness in-game values are calculated differently, and thus the in-game bonuses have a different effect on them. 

The other attributes that get bonuses are calculated in game as so - Default attribute value (0-6) * 5 + in-game bonuses (ranging from -3 to +4 in some cases)

Offensive Awareness = [30 - (OfA attribute value + hot/cold bonus + PP bonus + PK bonus + Team bonus + Comeback bonus) / 2] / 2     (yes, it's confusing, remember PEMDAS)

Defensive Awareness = [30 - (DfA attribute value + hot/cold bonus +  Team bonus) / 2] / 2  


All you have to know here, is that the bonuses have a larger effect on players with lower awareness. The lower the awareness, the larger the bonuses make a difference. Players with 5 or 6 Awareness attribute value will not benefit as much from the bonuses as players with 2-4. But, if the bonuses are all positive, a player with a 5 rating may benefit with a small bump. Also, the LOWER the total value here, the higher the actual Awareness of the player (unlike the other attributes, where higher value is better).



  • Like 2
  • Love 1
  • Thanks 2
Link to post
Share on other sites



Here's an example of the comeback bonus. This game featured CHI at LA. I watched the attributes for both RW (Larmer and Sandstrom).  I recorded what their attribute values were at the start of the 1st period. This would include the hot/cold bonuses and the Team Home/Away Bonuses. Then, I recorded the value at the start of the 3rd period. LA was leading at this point, 3-2. CHI was given the comeback bonus at this point. Note the values in BOLD

    1st Period FO 3rd Period FO   1st Period FO 3rd Period FO
Attribute (in Hex)   Sandstrom - RW Sandstrom - RW   Larmer - RW Larmer - RW
Wgt   48 48   38 38
Agl   12 12   15 15
Spd   12 12   15 15
OfA   09 09   0A 09
DfA   0B 0B   08 08
ShP   17 17   15 15
ShA   18 18   14 14
Pas   0E 0E   14 14
JNo   07 07   28 28
Rgh   08 08   10 14
StH   13 13   14 14
End   0D 0D   1E 1E
Agg   0D 0D   0B 0B
Fight   08 08   04 04
Chk   0D 0D   15 17


As you can see, Larmer got a boost in OfA (remember, lower is better for this), Rgh, and Chk. These values are in Hex, so the 14 in Rgh equates to 20 in decimal (30 would be the max, or 1E in hex).

422 in third, tie game 4-4.PNG

Above is a screenshot of the same game, tied at 4-4 with 4:22 left in the 3rd period. Both players receive the comeback bonus. Sandstrom is Home, Larmer is Away. Sandstroms OfA went from 09 to 08, Rgh from 08 to 0C (an increase of 4, from 8 decimal to 12), and Chk went from 0D to 0F (increase of 2, from 13 decimal to 15).


Example showing how the Comeback bonus disappears with a faceoff with under 2:30 left (this one was 1:40 left). First screenshot is start of 3rd, LA (Home) playing CHI (Away), LA down 4-0, second is at a faceoff with 1:40 left:

beginning of 3rd, LA down 4-0.PNGFO 140 left 3rd CHI 4-2.PNG

You can see how the values for Rgh and Chk are lower in the second shot (0E to 0A, 14 decimal to 10, and 11 to 0F, or 17 to 15).


  • Like 1
Link to post
Share on other sites

PP/PK Bonus


This game took place between LA and BOS (LA was Home). I watched the centers this time (Gretzky and Oates). I should have swapped players, since these 2 have maxed values for some of their attributes, but you can still see the change in ShA here. The first shot was taken at the START of the PP. The second at the next faceoff (during PP for LA).


1st Period.PNGPP-PK faceoff after.PNG

LA is Home (Gretzky) and Away is BOS (Oates). If you look at "Away C[6]" this is ShA for Oates. His ShA goes from 15 (or 21 decimal) to 13 (or 19 decimal), or a -2 drop. Remember these stats are on a 0-30 decimal scale, not 0-100, so a small difference matters.

Gretzky on the other hand, his "Home C[6]" value ShA goes from 0C (or 13 decimal) to 0E (or 15 decimal). He gets a +2 bump.


The PP/PK byte for BOS is 21, for LA is 12. But you can see here, the PP bonus for LA is clearly +2 (or the second digit), and for BOS is -2 (or the first digit).

This is confirmed in looking at the code as well. 

Might be easier to look at this. Note Gretzky misses out on some PP bonuses because he's already maxed out at Passing and StH:

    1st Period FO PP - 2nd Faceoff   1st Period FO PK - 2nd Faceoff
Attribute (in Hex)   Gretzky - C Gretzky - C   Oates - C Oates - C
Wgt   20 20   38 38
Agl   1E 1E   1B 1B
Spd   15 15   16 16
OfA   08 08   08 08
DfA   09 09   08 08
ShP   0B 0B   11 11
ShA   0C 0E   15 13
Pas   1E 1E   1D 1D
JNo   99 99   12 12
Rgh   01 01   02 02
StH   1E 1E   1A 18
End   1E 1E   1B 1B
Agg   01 01   07 07
Fight   02 02   00 00
Chk   0B 0B   11 11


Link to post
Share on other sites

This is amazing stuff. So lower players on expansion teams will get a better bonus usually if their off- def awareness are low. 

  • Thanks 1
Link to post
Share on other sites
  • chaos pinned this topic
  • 2 months later...

@chaos Thanks so much for posting all of these finds and info!  Going to reference some of this for the nhl94 website when adding team/player data.

Though might be worth updating the original post with the player Weight conversions, as those don't follow the typical ratings 0-6 mentioned.

Player Weight conversion:
1 = 148
2 = 156
3 = 164
4 = 172
5 = 180
6 = 188
7 = 196
8 = 204
9 = 212
10 = 220
11 = 228
12 = 236
13 = 244
14 = 252



  • Like 1
Link to post
Share on other sites

Join the conversation


Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.


×   Your previous content has been restored.   Clear editor



    There are no registered users currently online