Jump to content
NHL'94 Forums

Tony H

Members
  • Posts

    20
  • Joined

  • Last visited

  • Days Won

    1

Tony H last won the day on March 19 2021

Tony H had the most liked content!

Previous Fields

  • Favorite Way To Score
    blueline slapshot

Recent Profile Visitors

4,227 profile views

Tony H's Achievements

Newbie

Newbie (1/14)

1

Reputation

  1. I did a quick assembly trace of the clock and it doesn't look like there's any easy fix.
  2. wboy, it's good to hear from you. I was recently reading through some of the emails we sent each other when we were working on the NHL '94 stuff. We really hacked the hell out of that ROM. As far as the info on speeding up the players... I not sure yet if the info I found would be useful. I was actually looking for puck speed info, and stumbled across the other stuff. I haven't had time to investigate. Here is the ROM address/Game Genie code that makes the players skate faster going from left to right/right to left... $00914A:D16B = PRJT-BDWL The original instruction was 916B which is: SUB.w D0,$0028(A3). I changed it to D16B, although I'm not sure if that's the right replacement instruction (my 68k assembly is pretty rusty these days). It's kinda fun to watch because most of the players skate so fast that they slam into the walls. I also have a code for skating faster from bottom to top/top to bottom, but it's pretty glitchy... $00915E:D16B = PRJT-BDW8 As I mentioned, I haven't done any playing around with that info. I just changed the SUB.w instruction to an ADD.w instruction to see if I was in the ball park. I've been concentrating on figuring out how to speed up the puck. I have an assembly trace if you want it.
  3. I'm having a hard time with this one. I'm guessing that there's a "friction" value that's being used to make the puck go slower when it's on the ice (as compared to when it's in the air). I thought I had tracked it down, but it appears that it's a sub routine that effects players speed, as well as the puck speed. I made a code that makes all the players skate really fast, but not really useful (just fun to watch). It would be a lot easier to find the code if all the other players were gone. Is it possible (with a ROM hack) to eliminate everyone on the rink except myself? One other question... When you press the "C" button to shoot (trying to make a goal), can you change the power of the shot by just tapping the button as compared to holding the button down?
  4. Thanks for letting me know Mack. I've never really played the game before, so I didn't notice the shots were weak. I'll see if I can fix that.
  5. Not sure if anyone here uses Game Genie codes or not. These are fresh from the oven... NHLPA Hockey '93 (Genesis) NOTE: These codes have only been tested on version "REV01". RH7T-R60E Master Code (use this code if you get a blank screen). A4JT-AA7E The puck will always stay on the ice (when shooting). This code prevents the puck from getting airborne when shooting. AJKT-CA5R Infinite energy bars (the 3 energy bars that show up when you have line changes "on"). Players will never get tired. JMLA-AAHC Players get tired twice as fast (when line changes are "on"). AVXA-AAFR Energy bars only recharge half as fast when your players are resting. CKXA-AAFR Energy bars recharge twice as fast when your players are resting. DPXA-AAFR Energy bars recharge 3x as fast when your players are resting.
  6. Haven't been here in awhile. It's good to see this forum is still alive and well. Tony.
  7. Finally got the NHL Genesis Game Genie codes and the guide from above (all in one piece) up on my web site. Here's my address: http://www.angelfire.com/games2/codehut/ Tony H. P.S. There's a new version of Gens out now (Gens 9.5b) that combines an improved RAM searching feature with the memory tracer and assembly trace logger. Here's a link to it: http://www.homeactionreplay.org/info/
  8. The only time the government wants me is when it comes time to pay taxes. :-).
  9. I spent some time in NHL 94 trying to disable one of the ref calls (don't recall which one off hand), and the best I could do was to disable most (or all?) of the ref calls. I'm pretty sure I wouldn't be able to disable the two line pass in NHL 98.
  10. Sabre Dance, I don't know what a "two line pass" is. Drezz, as far as I know, it is probably possible to bypass some or all of the intro screens without any RAM loading problems. I don't have much experience in that area, so I can't help much.
  11. Drezz, I figured out the ROM hack to permanently unlock the 2 hidden teams (EA Sports and THQ)... Make sure your NHL 98 ROM is in BIN format. Open up the NHL 98 ROM with a hex editor and go to this ROM address: $1DB622. At that address you should see this number: 0803. Change that to: 6016. Save your changes and you're all set. It doesn't look like the game uses a checksum routine, so you probably won't need to hack a master code into the ROM. After you've hacked the ROM, start the game, go to the "Main Menu", select "Regular Game", set your options, then when you get to "Team Select", press Up or Down on the controller until you see the hidden teams. Here's the Game Genie code (in case you don't want to hack your ROM): C45B-4A3C Unlock the 2 hidden teams (EA Sports and THQ). What that ROM hack does is causes the game to jump over a bunch of conditional branches. It jumps right to the part that turns the cheat on. The cheat is turned on by setting the value at RAM address FFDEA8 to 0001 (this is done in the ROM at this address: $1DB63A). Hope that helps. Tony.
  12. Can't seem to get the controller cheat to work. Could someone give me detailed instructions (keep in mind that I've never played the game before). I tried A+B+C+Start at the EA Sports screen, and at the main menu, but didn't seem to work. Also, at the main menu, do I select: Regular Game, New Playoffs, New Season, or something else? I tried all 3 of those and didn't have any luck. Thanks for any help.
  13. I'm downloading the ROM right now. I'll see if I can figure out how to have the 2 hidden teams at all times.
  14. Thanks for the info wboy. Will have to try one of them.
  15. Scribe99... that's interesting, let me know what you find. Thanks for all the support everyone. I don't think I would have finished this guide if no one seemed interested. All right, now I'll show you how to find the ROM addresses for period lengths so you can adjust how much time you start each period with to any value you want. Use the same memory trace and assembly trace log as before. Our memory trace looked like this: [01:730A] W32 = 00000000 [FFC468] [00:7830] W16 = 0258 [FFC468] [00:7830] W16 = 0258 [FFC468] [01:5DFC] W16 = 0257 [FFC468] [01:5DFC] W16 = 0256 [FFC468] [01:5DFC] W16 = 0255 [FFC468] [01:5DFC] W16 = 0254 [FFC468] TRACE STOPPED The ROM address we're interested in here is 00:7830 because that's the ROM addresses that loaded the initial value of 0258. And remember that 0258 was a hex number which equals 600 in decimal, which equals 10 minutes (which is how much time we started the period with). Just like before, we need to subtract 2 from the ROM address listed in the memory trace to get the actual ROM address that we'll be searching for in the trace.log file. So 00:7830 - 2 = 00:782E. If you're not sure how to do hex math, just use your windows calculator. So 00:782E is the ROM address we'll search for in our trace.log file. Open up your trace.log file (with MS Word or ?), open up the "Find" window and type in our ROM address: 00:782E. Click "Find Next" and you'll notice that your first match isn't on the far left side of the page. For this example, we're only interested in matches on the far left side of the page. So click "Find Next" again. Your second match should be on the far left side of the page. This is what we're looking for. Here's what it should look like: 00:782E 31 C0 MOVE.w D0,($C468) A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFFA D0=C29D0258 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xNzvC Here's what the first line means... 00:782E 31 C0 MOVE.w D0,($C468) 00:782E is the ROM address of the instruction (opcode). 31 C0 is the opcode. MOVE.w D0,($C468) means it is moving the value in register D0 to RAM address $C468. RAM address $C468 (FFC468) is the amount of time on the clock. You may be asking... what the hell is register D0? Pay close attention here, because this is an important part of being able to read an assembly trace. In my "snippet" above from our trace.log file, there are a total of 16 registers shown. Registers are kinda like storage areas. There are 2 types of registers... The "A" registers are for Addresses, and the "D" registers are for Data. There are 8 "A" registers (A0 through A7) and 8 "D" registers (D0 through D7). All 16 registers are always listed for every opcode in our trace.log files. Get to know them, love them,... be one with the registers. Okay, I'm getting carried away, but registers are pretty important. We'll need to read the registers to find the ROM addresses for the values for the period lengths. From our trace.log snippet above, here's part of the first line: MOVE.w D0,($C468) We know that it "MOVEs" the value in register D0 to RAM address $C468. If you look at register D0 (above), this is what you'll see: D0=C29D0258. See the "0258" in there? That's where our number of seconds for each period is coming from. All we have to do is figure out where that value is coming from, and we'll find our ROM addresses. Let me explain one more thing before we move on... you may have noticed that the value in register D0 was C29D0258. Why does the game only use 0258 instead of the entire value of C29D0258? The answer is because the "MOVE" instruction has a "w" after it (MOVE.w), and the w means Word. A "word" is 2 bytes. Here is the list of the letters used and what they mean... B = Byte (1 byte) W = Word (2 bytes) L = Long word (4 bytes) Moving on... we know that register D0 cantains the value that we're interested in (0258). Here's how we figure out where that value comes from. This gets a bit complicated, so go drink a big cup of coffee so you'll be extra alert. To figure out where the value in register D0 is coming from, we need to read the assembly trace log backwards. Here is the part of the trace.log that we'll need to find what we're looking for... 00:7858 30 30 MOVE.w $00(A0,D0),D0 A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFF6 D0=C29D0002 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xnzvc 00:785C 4E 75 RTS A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFF6 D0=C29D0258 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xnzvc 00:7818 0C 78 CMPI.W #$0003,($C466) A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFFA D0=C29D0258 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xnzvc 00:781E 6D 00 BLT #$000E [00:782E] A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFFA D0=C29D0258 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xNzvC 00:782E 31 C0 MOVE.w D0,($C468) A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFFA D0=C29D0258 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xNzvC For right now, the only thing we're interested in is register D0. You'll notice that if you start at the bottom (00:782E), the value in D0 is C29D0258. Reading backwards (moving upwards one section), the value in D0 at ROM address 00:781E is still C29D0258. No change in D0 so move upwards to the next section. D0 is still the same, so move upwards again. When we finally get to the very top section (00:7858), you'll see that the value in register D0 has changed. Here's what that section looks like: 00:7858 30 30 MOVE.w $00(A0,D0),D0 A0=0000785E A1=FFFFBFAA A2=FFFFCA32 A3=FFFFB84A A4=FFFFB88A A5=FFFFD404 A6=00000000 A7=FFFFFFF6 D0=C29D0002 D1=0000FFFF D2=FFFF0000 D3=00000080 D4=0000022E D5=0000000C D6=00005311 D7=0000000A xnzvc The value in D0 has changed to C29D0002. The 0258 part is gone. So we know that this is the line that loaded the number of seconds (0258) into register D0. This line of code will tell us what we need to know. Drum roll please... MOVE.w $00(A0,D0),D0 I know it may seem a little cryptic, but here's what it means: see where it says (A0,D0)... that means you take the 2 byte value in D0 (0002) and add it to the ROM address in register A0 (remember, the A registers are for Addresses). A0=0000785E so 0000785E + 0002 = 00007860. If you go to ROM address 00007860 with your hex editor, this is the value you'll see: 0258. BINGO!! We found it! This is the value that the game uses for 10 minute periods. You can change that value to any number you want with a Game Genie code, or by hacking the ROM. A value of 0001 would give you 1 second periods, 001E would give you 30 second periods, etc. Just remember it uses hex values. And remember it will only work when you select 10 minute periods (the default time). Here's a couple Game Genie codes: 007860:01A4 = YV6A-ACDA 7 minute periods. Only works when you leave the period length at 10 minutes. 007860:003C = HV6A-AADA 1 minute periods. Only works when you leave the period length at 10 minutes. Here's some "extra" info (wboy, does "extra" info sound familiar? lol). If you look at the ROM address (with your hex editor) where we found our value for the 10 minute periods, here is what you'll see around it: 012C 0258 04B0 001E These are all the values for the other period lengths. 012C = 5 minute periods. 0258 = 10 minute periods (this is the one we found). 04B0 = 20 minute periods. 001E = 30 second periods (this is for the controller cheat). You can change those values to anything you want, and if you selected that particular period length in the option screen, your new "hacked" time would kick in. Well, that concludes our ROM hacking 101 class. As I said before, after you've done a few, reading an assembly trace log gets easier. Just remember that you don't need to know what everything in the trace.log means, just the part you're interested in. To be honest with you, there is still a lot of stuff in there that I don't completely understand. Get to know the basics and you'll find lots of useful stuff. Tony.
×
×
  • Create New...