I discovered a code that turns the Auto Player Switching Off in NHL 94 on Genesis. With this code enabled, when a teammate gains control of the puck, you no longer are switched to the player with the puck. You remain in control of the player you were controlling while the CPU controls the player with the puck. (If you press the B button, you will then switch to the player who has the puck) This code allows you to control players who don't have the puck and lets you stay in control of a single player for as long as you want. (Until there's a face-off, where control resets back to the Center)
It's been determined that the best way to enable this code is to edit the rom offset at 17FEA, by changing the default 2-byte value of 017FEA:0001 to 017FEA:0004.
To get this code to work, after you hex edit the single-byte at 17FEB to "04" in the bin, when you start up your rom and enter the Main Menu, you shouldn't adjust the "Players" option in the Menu Menu or else it may reset the code. Just leave the "Players" option at the default "One - Home" without changing that selection and when you are ready, proceed into a game. If done correctly, when you enter the game, you'll be in control of the Visitor Team and you will observe that Auto Player Switching will be off.
If you test this out, it will be an adjustment from how you are used to playing NHL 94 because with the auto player switching off, you will now have to rely more on the CPU A.I. of your teammates and you may learn to take on new roles and responsibilities. If you play with Offsides on (which I recommend) you could find yourself in situations where the usual roles are reversed and for a change you will be tasked with having to remain onside when your CPU teammates have the puck and are advancing down the ice.
- - - - - - - - -
When using this code that turns the auto player switching off, there are several changes to that gameplay that you will experience. In addition, there are some issues that I've observed that you should be aware of if you test this code for yourself :
1) This control method only works when controlling the visitor team. (in a 1P game vs a CPU home team) I've yet to discover a way to enable the Auto Player Switching Off while playing as the Home Team. If you have any ideas on how we can control the home team with having the auto player switching off, I am very interested in researching how to make that happen as it would be a great accomplishment. But as of now, it is only possible to play with the auto player switching off while controlling the visitor team.
2) With this code enabled, when the goalie makes a save and gets the puck, it will no longer switch your control to the Goalie. When the goalie gets the puck, you will remain in control of one of the 5 position players, and the CPU will control the goalie. You will have to "get open" with your defensemen or whoever you are controlling and see if the CPU-controlled goalie will pass it out to you. This is something that was a very new experience for me, but it is very satisfying to get open and be rewarded with a pass from the CPU Goalie. With the CPU controlling your team's goalie, to give you enough time to get open before a face-off is called, I suggest using the code "CPU Goalies can hold the puck for 2X as long", which is 01530E:0118 in the rom.
Please note that the auto player switching off code only works without issues when you set Goalies to Auto Control. If you set Goalies to Manual Control, you will encounter an issue if you switch to the Goalie when he has the puck when you try to pass the puck to a teammate. (more information about this issue at the end of the post)
3) With the Auto Player Switching Off code enabled, there is a new phenomenon that occurs with regard to Line Changes. With Line Changes set to On, sometimes the CPU will override your Line Change choice when it prompts you to choose a new line before a face-off. You'll notice this when you try to make a line change before a face off. With this code on, the CPU may select a different line then you selected. This issue doesn't occur when you make a line change on the fly using the A button. (only when prompted to select a line before face-offs) This incentivizes the use of the stamina depletion codes for adjusting the stamina depletion rate of players, since sometimes the CPU will choose a line that is fatigued when you want to select a fresh line.
This occurs when you run the Auto Player Switching Off code and have Line Changes set to On. It works basically like a combination of the "Auto" and "On" Line Change options both working simultaneously. So, you'll notice with Line Changes Set to On that the CPU will still trigger Line Changes on the fly like they do when Line Changes are set to Auto. So be aware that when you test this code with Line Changes set to On, the CPU may override the line that you select before face-offs, which you will observe when you are prompted to select a line change before a face-off and the CPU often will choose a different line than the one you select. I have found a solution to the CPU overriding your line selection problem through the use of hotkeys which is described at the end of the post.
4) One of the adjustments to playing NHL 94 with Auto Player Switching Off is what happens when you pass to a teammate, particularly when in the attacking zone with regard to one-timers. When you are in the attacking zone, you will observe that passing the puck to a CPU teammate will often cause an one-timer to trigger automatically. With the Auto Player Switching off, you no longer are tasked with triggering one-timers yourself when you pass the puck to a teammate, since the game no longer switches you to the player you are passing to. Now the CPU A.I. determines whether to attempt a one-timer, unless of course you are receiving a pass from a CPU teammate or if you manage to switch to the player receiving a pass early enough.
I am currently researching ways to better control when CPU-triggered auto one-timers occur with auto player switching off. You may find that with this code on, your CPU teammates auto-trigger one-timers too often. This is something I am trying to find a remedy for, either by editing player ratings or by finding additional codes that adjust CPU teammate decision-making. If you have any suggestions on how we can better control how often the CPU A.I. triggers one-timers when passing to CPU-controlled teammates in the attacking zone, that's something I'd like to work on.
5) On rare occasions, I have noticed that there are times when a CPU controlled teammate receives the puck and proceeds to stand in place doing endless 360s. This appears to be some kind of a glitch. It doesn't happen very often, but I have observed it. At first, I thought it had something to do with the player having low stamina, or something related to player ratings, but now I'm not exactly sure what is causing this to occur. If it happens when you are testing this code, you can press the B button to gain control of that CPU teammate who is doing the 360s with the puck, and usually the issue is sorted when there's a line change or a whistle. I am trying to isolate why this happens to see if I can find a code or a remedy that stops this glitch from occurring.
- - - - - - - - - -
Additional Notes and Suggestions :
Keep in mind that this discovery is still very much a work-in-progress when it comes to ironing out all the issues with it. I have tried to be as detailed as possible with this topic when it comes to describing what I have experienced when using the code. In this section I have tried to provide solutions that get around some of the issues when using the code.
When you first test the code, I suggest setting Goalies to Auto Control, as you will encounter an issue if you set Goalies to Manual if you switch to the Goalie when he has the puck and you pass the puck to a teammate. It will temporarily cause you to lose control of the player until the next face-off, at which point the player will revert to CPU control once again but the 2P icon will remain visible on that player for the rest of the match. Keeping Goalies set on Auto Control when you use this code prevents this issue from occurring.
With that said, I have developed a way to get around this Manual Goalie Control issue by using a hotkey to switch back and forth between Auto Player Switching On and Off so that when the goalie has the puck, you can switch to him and turn auto player switching back on momentarily, pass it out normally, then turn the auto player switching off again after the goalie passes it out. To create a hotkey to switch back and forth between Auto Player switching on and off on the fly while remaining in control of the visitor team, you'd need to find the single byte value of "04" in RAM and switch that between 02 and 04 with hotkeys during gameplay. That's what I do as I have those values mapped to two additional buttons on my controller for use while playing as the visitor team. FYI : Setting the code to 02 puts you in "normal" control of the visitor team. Setting the code to 01 (which is the default value) puts you in "normal" control of the home team. And Setting the code to 00 puts the game into "demo mode" where pressing a button returns you to the Main Menu.
Using hotkeys to switch the code between 02 and 04 also allows you to solve the problem of the CPU overriding your line change selection before face-offs with line changes on. If you switch the code to "02" before the line change menu pops up prior to a face-off, you will be able to select the line that you want without the CPU making the selection for you. (You can switch the value back to "04" after the line change menu pops up even before making your line selection)
So there is a remedy to both of these issues, which is to find the RAM address for the single-byte code and set up hotkeys giving you two buttons that you can press to turn the auto player switching on and off during gameplay while playing as the visitor team. If you need assistance with setting up the hotkeys, I'd be happy to help you and explain how I set them up.
When using the Auto Player Switch Off code, since your team's goalie will now default to being controlled by the CPU when they have the puck, I suggest turning on the "CPU Goalies can hold the puck for 2X as long" code (Game Genie : DBKT-CCAR or 01530E:0118 in the rom) to give your CPU-controlled goalie more time to pass out the puck before a face-off is called since control won't switch to the goalie any longer when he gets the puck. I have found that the value of "0118" at rom offset 01530E is a good balance for relying on the CPU controlled goalies to pass the puck out. If you set that lower, there will be too many goalie face-offs. If you increase it higher, it will cause your goalie to wait a long time before passing it out, even if there are players open. (it seems that CPU goalies will wait to pass it out until right before the time specified at 01530E when the ref will call for a face-off)
- - - - - - - - - -
Through this discovery of turning off auto player switching, I find myself experiencing NHL 94 on a new level. It works like a "player lock" except that it switches you back to the center when there is a face-off. You still retain the ability to switch players with the B button, but since the game no longer switches you automatically when a player on your team gets the puck, you now have more control over which player you are controlling which can be very useful and rewarding.
The challenge of playing NHL 94 this way is that you will have to rely more on the decision making of the CPU A.I. since when they take control of the puck they will make their own decisions. This can take some getting used to, but I think you will find yourself paying more attention to aspects of the CPU A.I. that you weren't paying much attention to before because of the auto player switching. With the hotkey switching method that I have implemented, I find myself switching back and forth between auto player switching on and off throughout a match, which adds some variety and depth to the gameplay.
If you test this out yourself, I am interested in hearing your feedback and observations.
I want to give a special thanks to @kingraph for testing the code and helping me work on this discovery.