Jump to content

Editing Large Helmets


jstout

Recommended Posts

I didn't see any documentation on editing the large helmets in Tecmo Super Bowl for the NES so here is some basic info. Some knowledge of hexidecimal is helpful here.

I'll start with the locations of where the logos are told to be placed.

Team Offset Pointer

Buffalo x1008C C0A6

Indianapolis x1008A B2A6

Miami x1008E CEA6

New England x10090 DCA6

NY Jets x10072 F3A5

Cincinnati x10074 01A6

Cleveland x10076 0FA6

Houston x10078 1DA6

Pittsburgh x1007A 2BA6

Denver x1007C 39A6

Kansas City x1007E 47A6

LA Raiders x10092 EAA6

San Diego x10094 F8A6

Seattle x10084 88A6

Washington x1009A 22A7

NY Giants x10088 A4A6

Philadelphia x10096 06A7

Phoenix x10098 14A7

Dallas x10086 96A6

Chicago x1009C 30A7

Detroit x1009E 3EA7

Green Bay x100A0 4CA7

Minnesota x100A2 5AA7

Tampa Bay x100A4 68A7

San Francisco x100AC A0A7

LA Rams x100A8 84A7

New Orleans x100AA 92A7

Atlanta x100A6 76A7

Example: Lets swap Buffalo and Indianapolis. At x1008A, put C0 A6 B2 A6. The Buffalo and Indianapolis logos should have been switched. Go ahead and put it back now.

Thats not really what we are looking for so lets move on to what is being pointed to.

I'll use Cleveland and Houston for later examples so lets calculate their offset. Cleveland 0FA6, ("0F" + 10) ("A6" + 60) = 1F 06, then swap and add a x1 for x1061F. Same for Houston and you get x1062D.

Cleveland points to the line:

F6 70 FF FF FF FC 08 F8 36 42 92 22 AB 17

Houston points to the line:

F6 70 FF FF FF FC 09 F8 37 3A 92 2B AB 17

From here what we are interested in is Cleveland's "36 42 92 22" and Houston's "37 3A 92 2B". The first hex moves the teams logo up and down. The second hex moves the teams logo left and right. The final two hexes direct us to the design of the logo.

Example: Lets move Houston's logo. Change "37 3A 92 2B" to 30 30 92 2B. Houston's logo should be almost off the helmet now. Go ahead and put it back now.

Thats a little useful but we want the actual design so lets find that location. For Cleveland 92 22, ("92" + 90) ("22" + 10) = 1232, add a x1 to that a we have x11232. Same for Houston and we get x1123B.

Houston's logo has more data so lets check that out. The line directed from above will be:

9F 39 1E 3D 34 01 36 05 3C 80 39 1F 3D 35 01 37 05 3D 81 05 39 FF

Now the helmets are drawn on a grid, main columns are 9E 9F 80 81 82 but a few logos have been moved so far right like Cleveland that 9B 9C 9D could be used. The main rows are 39 3D 01 05 09 0D 11 or by using 79 7D 41 45 49 4D 51 the tiles will be mirrored. Now we know the grid numbers lets read Houston's logo.

Column 9F Row 39 Place Tile 1E, Row 3D Place Tile 34, Row 01 Place Tile 36, Row 05 Place Tile 3C, Column 80 Row 39 Place Tile 1F, Row 3D Place Tile 35, Row 01 Place Tile 37, Row 05 Place Tile 3D, Column 81 Row 05 Place Tile 39 and Stop using FF

Looking at a more advanced design like:

9E 3D 00 01 02 05 08 9F 3D 01 01 03 05 09 80 3D 04 01 06 05 0C FC 36 81 3D 0A FF

Everything is going smooth until you reach the FC. FC tells it the following locations (Column 81 Row 3D Tile 0A) will be shifted to place 36. I haven't tested the shifts thoroughly yet.

Example: Lets change Houston's logo. Replace their line with:

9E 3D 1E 01 34 05 36 9F 3D 1F 01 35 05 37 80 3D 39 01 3C 05 3D FF. The logo should have the base legs to the right of the upper section. Go ahead and put it back after you looked.

Ok, that was great but many of you now want to know if you can use tiles from other teams especially if they go unused.

Example: Lets take a tile away from Cleveland and give the rom space to Houston and at the same time use a tile from Indianapolis. At x11232, change the line to:

9F 3D 3B 80 3D 3E FF 9F 09 1E 39 09

Those paying real attention would have noticed that the location of Houston's starting point changed. We need to go back above to x1062D and edit our direction spot to "92 29". Go ahead and put it back when done.

Now to edit the colors. Starting at x23D79 is 30 16 12 10 30 30 12 26 which is the colors of Buffalo. The first three colors are the helmet palette, the next two are the facemask palette, and the final three are the logo palette. Teams will be in order from Buffalo to Atlanta.

Well thats the basics on editing the large helmets. The big trick seems to be planning the rom space and selecting the proper tiles to get placed.

Unfortunately, since I've been busy I've yet to find how some teams like Cincinnati and the LA Rams get the background objects on their helmets (Cincinnati's stripes for example) or how the tiles get numbered for the helmets. But I'm sure this is enough info for now.

Link to comment
Share on other sites

I see all these numbers on how to edit large helmets but what program do you use. Do you use a hex editor or a tile editor.

You'll need a tile editor if you wish to edit the graphics. A hex editor will be needed to arrange the tiles in a different pattern and perform any other edits.

Link to comment
Share on other sites

  • 4 weeks later...
  • 2 weeks later...

I've got a question for you, jstout. I've tried using the information you gave above to just move some large helmets around, but I've ran into some problems.

For instance, when I tried to move Indianapolis's Helmet into the L.A. Raiders' spot, I first changed the values at offset x10092 (L.A.'s location) to B2A6 (Indianapolis's value). That succeeded in changing the logo on the Raider's helmet to Indianapolis's, but the colors were still grey and black. So then I went down to offset x23D79 and then proceeded through the values until I came across the palette for the Raiders, which I then changed to mimic the palette for the Colts.

I thought that would do it, but strangely enough, it didn't. When I viewed the helmet on my emulator (FCE Ultra, in case you were wondering), it showed a white and blue helmet with Indianapolis's logo, but with blue smudges all around the logo. Also, there was no blue stripe along the top of the helmet. Apparently, there is still some data concerning the background of the helmets that needs to be changed, but I don't know where to look to find it. Can you help me out?

Link to comment
Share on other sites

Ok, I'm assuming you are describing the "sunlight spots" on the helmet. Basically, in the game there are 4 different helmet designs.

Two are the Bengals and Rams because they have their logo drawn onto the helmets picture. And the final 2 cover the rest of the league. The Indianapolis Colts have one type and the Los Angeles Raiders have the second type.

The differences are the Los Angeles Raiders' type has a "sunlight spot" on the top of the helmet on both the left and right sections, around the earhole, and a curve near the bottom of the helmet plus only has one stripe. (Indianapolis' type has 2 stripes and no "sunlight spots".

The background areas of the 4 helmets are drawn at x16572 to x1665E. Currently, I have no idea how the game chooses which helmet to place on the screen but I'm looking for that among other things.

Without that info there is still something you can do. The simpliest way is to adjust the palette: "12 30 12 10 30 12 00 00" to "30 30 12 10 30 12 00 00" which make the sunlight spots white on a white helmet with the only difference from the original being a thin stripe instead of a double blue stripe. Else the only option is redrawing the design in hex or on the graphic itself which will cause problems with a few of the helmets using the same design.

Link to comment
Share on other sites

Thanks a lot. Let me know as soon as you find out how the game loads the helmet backgrounds. This is especially important so that future ROM customizations can include the Bengals and the Rams in other locations. In the meantime, I'll just use the information you gave me to work around the problem. Thanks again.

Link to comment
Share on other sites

  • 2 years later...

I used jstout's info to come up with this table:

Team Colors:

1st 3 - helmet palette

next 2 - facemask palette

final 3 - logo palette

this is also a good site to figure out the what the hex value is in actual color: Art of ROM Hacking



Team Address- Hex

Buffalo x23d79 - 30 16 12 10 30 30 12 26
Indianapolis x23d81 - 12 30 12 10 30 12 00 00
Miami x23d89 - 2c 30 26 1c 2c 2c 26 00
New England x23d91 - 25 30 12 15 25 12 25 00
NY Jets x23d99 - 2b 1b 0b 0f 00 30 00 00
Cincinatti x23da1 - 26 16 0f 0f 00 26 00 30
Cleveland x23da9 - 02 26 30 10 30 36 30 00
Houston x23db1 - 25 30 21 15 25 25 21 00
Pittsburgh x23db9 - 12 02 18 02 12 28 30 25
Denver x23dc1 - 30 12 15 10 30 22 15 30
Kansas City x23dc9 - 26 16 06 10 30 0f 30 00
LA Raiders x23dd1 - 32 10 00 00 10 10 30 0f
San Diego x23dd9 - 22 12 02 12 22 28 30 00
Seattle x23de1 - 30 31 10 11 21 11 30 2a
Washington x23de9 - 30 15 18 18 28 0f 30 27
NY Giants x23df1 - 15 12 05 10 30 22 00 30
Philadelphia x23df9 - 2b 1b 0b 10 30 32 30 31
Phoenix x23e01 - 30 30 10 10 31 06 0f 28
Dallas x23e09 - 12 31 30 00 31 12 30 22
Chicago x23e11 - 12 02 01 02 12 15 30 22
Detroit x23e19 - 11 10 30 11 21 32 30 11
Green Bay x23e21 - 0b 28 30 0b 1b 0b 1b 30
Minnesota x23e29 - 23 13 03 03 13 28 30 23
Tampa Bay x23e31 - 15 30 26 15 26 15 26 00
San Francisco x23e39 - 15 27 30 10 30 0f 30 15
LA Rams x23e41 - 28 03 13 03 13 13 38 23
New Orleans x23e49 - 0f 18 30 0f 00 0f 30 28
Atlanta x23e51 - 12 02 01 02 12 22 30 12

Link to comment
Share on other sites

I'll use Cleveland and Houston for later examples so lets calculate their offset. Cleveland 0FA6, ("0F" + 10) ("A6" + 60) = 1F 06, then swap and add a x1 for x1061F. Same for Houston and you get x1062D.

Cleveland points to the line:

F6 70 FF FF FF FC 08 F8 36 42 92 22 AB 17

Houston points to the line:

F6 70 FF FF FF FC 09 F8 37 3A 92 2B AB 17

I just want to make sure I get this correct. For Cleveland, you take "OF" and add it to "10" and get "1F."

- what is the "10" for?

Also, I'm not too great with hex, and i just want to understand the concept of "A6" added to "60."

-First, why is it "60?"

-Also, when we are working with two digit hex, does it go FE, FF, 00, 01? Is that why when "A6" added to "60" equals "06"?

-Does this also mean that "A7" + "60" = "07"?

Link to comment
Share on other sites

It's probably easier to look at it this way

0FA6 is a pointer

swap the numbers to A60F and add 6010 to get 1061F.

I believe the 6000 part is something to do with the bank it's stored in.

The 10 part is for the header.

EDIT: You can use the windows calculator for hex addition. Go to view -> scientific, then change the 'dec' to 'hex' in the upper left corner.

Link to comment
Share on other sites

I just want to make sure I get this correct. For Cleveland, you take "OF" and add it to "10" and get "1F."

- what is the "10" for?

Also, I'm not too great with hex, and i just want to understand the concept of "A6" added to "60."

-First, why is it "60?"

-Also, when we are working with two digit hex, does it go FE, FF, 00, 01? Is that why when "A6" added to "60" equals "06"?

-Does this also mean that "A7" + "60" = "07"?

I wrote this post a long long time ago. Since then I've written a pdf tutorial with some extra info and pictures to explain.

Your questions here relate to the NES hardware but I think you'll understand clearer with explanations.

Why x10 added:

Yes, x0F + x10 = x1F. The x10 that is added is because of the 16 byte (x10) NES Header. On the game cartridge this header doesn't exist and is installed in roms so emulators can know what it should be reading. All pointers will be x10 more in the rom now from its existance.

Why x60 added:

The NES can only hold so much data at one time from the game (Stored at $8000 to $FFFF) during play. Because of this the game is broken up into banks (sections that can be loaded when needed). The TSB game has a constant $C000 to $FFFF area and swaps what it needs into $8000 to $9FFF and $A000 to $BFFF.

The helmet design here is in a bank loaded in $A000 to $BFFF during play. The start of the bank is at x10010 (remember x10 for the NES header). So a pointer of $A000 = x10010 and a pointer of $B000 = x11010. The difference in hex is $6010. The x60 in this case moves you to the location (alternative is to subract xA0). So when we were using xA6 and adding x60 = x106 and the lo byte + x10 finished the location.

Where I confused some is that dropping the 1 in front because it is second nature in NES pointers because the bank start could be anywhere like x20010 or even x10 in which case the 1 is now a 2 or 0 (so that digit adapts to where the info is).

And yes xA7 + x60 = x07.

Link to comment
Share on other sites

  • 9 months later...

not sure if this was documented else where, but found it awhile back:

helmet type (background): 0x23E59 - 0x23E74

40=bills, ...

41=jets, ...

42=rams

43=bengals

logo indexes: 0x23E75 - 0x23E90

with these, teams can use the same helmet logo without using more then one logo header slot. probably not very useful unless you have the same team in the rom more then once.

 

x3f66a is where these start for the NFC West teams on the 32-team ROM:

x3f66a = 49ers (x40)

x3f66b = Rams (x41)

x3f66c = Seahakws (x41)

x3f66d = Cardinals (x40)

Link to comment
Share on other sites

  • 5 months later...
  • 4 months later...
  • 4 weeks later...
anyone with any thoughts about this?

There is a single number value that does the order of the logo pointers (they aren't actual pointers though). I found these much later on. I can list the locations of those if you really want to know.

Link to comment
Share on other sites

I found these much later on. I can list the locations of those if you really want to know.

if you get a chance, i would like to see them. partially because i don't think i understood what you meant, and partially because i'd like to mess around with those numbers.

x23E75 to x23E90 (Buffalo to Atlanta)

Link to comment
Share on other sites

  • 2 weeks later...

Yet another question...

When looking helmet design lines that say...

F6 70 FF FF FF FC 06 F8 3A 3A 92 01 AB 17

I am not sure what each of these bytes represent.

Specifically, I don't know what byte 7 ('x06') is telling us. It appears to be different for each team, but I couldn't see what it controlled. Any ideas?

I know that byte 2 ('x70') is telling us which tile bank to use.

I know that bytes 9 and 10 ('x3A' and 'x3A') tell us how to adjust location of the design.

I know that bytes 11 and 12 ('x92' and 'x01') tell us the location of the actual layout of the tiles.

I don't know exactly how bytes 1,3,4,5,6,8,13,14 function, but they appear to be the same for every team and thus I don't really care about them too much.

Link to comment
Share on other sites

i've wondered about some of those bytes too.

i took a look in the debugger and byte 7 gets written to ram $51 on screens with the large helmets. it doesn't get read back before it gets overwritten by something else. i couldn't find anything that actually used it.

Link to comment
Share on other sites

F6 70 FF FF FF FC 06 F8 3A 3A 92 01 AB 17

I am not sure what each of these bytes represent.

Specifically, I don't know what byte 7 ('x06') is telling us. It appears to be different for each team, but I couldn't see what it controlled. Any ideas?

F6 is a control byte for 70 FF FF FF which loads the tile banks

FC is a control byte for 06 that has no known affect

F8 is a control byte for 3A 3A which loads the x, y location for the logo

92 01 is a pointer that goes to the logo design

AB 17 is a pointer that goes to a section that controls x, y location

I got rid of the FC ## on the helmet and facemask sections and it still displayed properly so it might have been something unfinished or removed.

Link to comment
Share on other sites

  • 1 year later...

I figured I'd document this to save time for others (and me). Anyone who has "large helmet" editing knowledge (or general graphic knowledge) should verify this for me.

The face mask sprite data is located near the same area as the team logos for the large helmets.

x107BE is where the face mask data is stored:

F6 FF 73 FF FF FC 02 F8 42 3E 94 92 AB 17

The third byte (x73) is telling the game to load the 4th set of (64) logo tiles (which start at x5CC10).

The 11th and 12th bytes (x94 x92) are telling us that the layout/arrangement of bytes starts at x114A2:

80 3C 42 00 48 81 3C 43 00 49 82 00 4C 08 46 83 00 40 08 47 FC 3E 81 38 41 82 38 44 FC 32 81 04 4A 82 04 4B FF

Those familiar with helmet editing will see that we are using the following tiles: 42, 48, 43, 49, 4C, 46, 40, 47, 41, 44, 4A, 4B

Those familiar with helmet editing may wonder why the tiles are larger than 3F (x00-x3F would be the 64 tiles from our logo's tile bank).

If we look back at the bytes starting at x107BE, we see F6 FF 73 FF FF. Byte 3 here is telling us to put the 64 tiles starting at x5CC10 into the second tile bank in memory. (The helmet logos all start with F6 ## FF FF FF where ## is 70, 71, 72, 73, or 74 which tells us to put the 64 tiles into the first tile bank in memory.) The second bank has tiles that go from x40-x7F.

Breakdown of Bytes


80 [Column x80]
3C [Row x3C]
42 [Tile x42]
00 [Row x00]
48 [Tile x48]
81 [Column x81]
3C [Row x3C]
43 [Tile x43]
00 [Row x00]
49 [Tile x49]
82 [Column x82]
00 [Row x00]
4C [Tile x4C]
08 [Row x08]
46 [Tile x46]
83 [Column x83]
00 [Row x00]
40 [Tile x00]
08 [Row x08]
47 [Tile x47]
FC [Modifer]
3E [Adjustment -- Right -2 (Left 2)]
81 [Column x81]
38 [Row x38]
41 [Tile x48]
82 [Column x82]
38 [Row x38]
44 [Tile x44]
FC [Modifier]
32 [Adjustment -- Right 2]
81 [Column x81]
04 [Row x04]
4A [Tile x4A]
82 [Column x82]
04 [Row x04]
4B [Tile x4B]
FF [Sentinel]

Those familiar with the how the layouts work may notice that all of the 'Row' bytes are off by x01 compared to what we've seen with the helmet logo layouts. The x01 difference looks to be changing the color palette (from the logo palette to the face mask palette).

Quick breakdown of my understanding of rows:


Row 1 (arbitrary number)
38 - face mask palette
39 - logo palette
3A - face mask palette (same location as 38, too)
3B - logo palette (same location as 39, too)

Row 2 (arbitrary number)
3C - face mask palette (one row lower than 38/39/3A/3B)
3D - logo palette (one row lower than 38/39/3A/3B)
3E - face mask palette (same location as 3C, too; one row lower than 38/39/3A/3B)
3F - logo palette (same location as 3D, too; one row lower than 38/39/3A/3B)

I'm still trying to figure out how we know to use the data starting at x107BE. I'm guessing x100AE (AE 47) is pointing us to x107BE, but I have no idea how we get to x100AE.

jstout, let me know if I'm wrong with any of this info.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...