Register | Login
Views: 19364387
Main | Memberlist | Active users | ACS | Commons | Calendar | Online users
Ranks | FAQ | Color Chart | Photo album | IRC Chat
11-02-05 12:59 PM
1 user currently in Rom Hacking: hukka | 2 guests
Acmlm's Board - I2 Archive - Rom Hacking - This may very well be, a stupid question. | |
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
User Post
phishit

Micro-Goomba
Level: 7

Posts: 12/13
EXP: 1115
For next: 333

Since: 04-15-04

Since last post: 256 days
Last activity: 71 days
Posted on 02-19-05 02:25 AM Link | Quote
But How do you change the color of an individual tile in an NES game? I am currently working on SMB1 and it would be real helpful if i knew how to do this. I know its possible, because in super luigi by darknight the colors are different than normal. Is there a simple way to do this or do i have to go through a s***load of programming?
Heian-794

Red Super Koopa
Level: 44

Posts: 647/896
EXP: 611014
For next: 271

Since: 06-01-04
From: Kyoto, Japan

Since last post: 21 days
Last activity: 10 days
Posted on 02-19-05 02:33 AM Link | Quote
This is not at all a stupid question, and is in fact a bit complicated.

If you're running FCEUXD or Nesticle, you should be able to check the palette. Find the code for the color of the tile you want to edit on this nifty chart:

http://www.spoonybard.com/docs/paletdat.html

(For example, 08 is brown. Let's imagine that you want to make that brown into light grassy green, 29.)

And then find that in the ROM, which is much easier said than done in many cases. A helpful hint is to look at the sequence of palette colors used in the emulator and search for them all in a row; e. g. brown-magenta-orange, also known as 08-15-16. There should be many fewer instances of 081516 than just 08, which would be the proverbial needle in a haystack. Find the 081516 and change it to 291516. Now see if the tile you want to change is different. If it isn't, then you changed the wrong byte, so try again.

BTW, if what you're asking is how to change the color of one tile while leaving other examples of the same tile, which are on the screen at the same time, unchanged, then I'll have to defer to more knowledgeable hackers, who will presumably toss a barrage of flames my way.

Heian
phishit

Micro-Goomba
Level: 7

Posts: 13/13
EXP: 1115
For next: 333

Since: 04-15-04

Since last post: 256 days
Last activity: 71 days
Posted on 02-19-05 03:06 AM Link | Quote
ahh thanks for that information. i understand how too change the color for the game but not an individual tile. Anyone know how to do this
tuna
...
Level: 3

Posts: 232/2
EXP: 51
For next: 77

Since: 12-02-04

Since last post: 1 day
Last activity: 1 day
Posted on 02-19-05 03:12 AM Link | Quote
Changing the palette of one 8x8 tile is, in fact, impossible without using a certain mapper. You're better off just changing the palette of all of them, since just changing one tile is rediculously hard and such.

Also, make sure the tile (or object) you want to change doesn't have another version with another palette.
Parasyte

Bullet Bill
Level: 35

Posts: 302/514
EXP: 267348
For next: 12588

Since: 05-25-04

Since last post: 104 days
Last activity: 32 days
Posted on 02-19-05 03:33 AM Link | Quote
Changing the palette used by a single sprite tile is very easy. You can use FCEUXD to peek at the sprite memory, and with some knowledge of the NES sprite format (available in Y0SHi's nestech.txt) you can figure out which of the 64 sprite tiles is the one you wish to change. From there, work backwards through the use of write breakpoints to discover which routine sets the palette for the tile, and where the palette data actually comes from.

In order to change the palette of a single background tile, you will find much more difficult. As mentioned, it is impossible to change the palette used by a single background tile on NES without the use of the MMC5 mapper (and even this takes a bit of work to accomplish). Once again, Y0SHi's nestech.txt will help you understand how backgrounds are built on NES. Backgrounds are created from two seperate 'tables' - one to place the tiles (name table), and another to set the palette for those tiles (attribute table). The attribute table is set up in a way that it DOES NOT allow setting the palette to only a single tile. Instead, each 2-bit entry in the attribute table will assign a palette to 4 tiles in a 2x2 grid. If you do the math, each byte contains 4 entries (2-bit * 4 = 8-bit = 1 byte).
If that's not confusing enough, finding where and how the attribute table is setup also requires write breakpoints and 'fluent' assembly knowledge.


With that taken care of, may I ask what it is you want to change? Someone may already have the information you are looking for.
NetSplit

Koopa
Level: 19

Posts: 11/117
EXP: 30378
For next: 5399

Since: 04-05-04

Since last post: 1 day
Last activity: 1 hour
Posted on 02-19-05 03:36 AM Link | Quote
Why did you make a new thread?

And yes, it's possible to change the color of an individual background tile in one specific NES mapper, but that won't realy help you in this situation. If you mean sprite tiles, though, then I'd imagine it's fairly easy to do in SMB. I'm sure there's someone here with more knowledge about the SMB ROM than I who could help you out, if this is what you're trying to do.

Additionally, Heian-794, I wouldn't recommend that color table. The one in The Art of ROM Hacking is much better; I wouldn't trust any table that shows 1D as black.
Heian-794

Red Super Koopa
Level: 44

Posts: 649/896
EXP: 611014
For next: 271

Since: 06-01-04
From: Kyoto, Japan

Since last post: 21 days
Last activity: 10 days
Posted on 02-19-05 01:42 PM Link | Quote
Thanks for that, NetSplit! That document looks really complete and useful; hadn't seen it before.
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
Acmlm's Board - I2 Archive - Rom Hacking - This may very well be, a stupid question. | |


ABII


AcmlmBoard vl.ol (11-01-05)
© 2000-2005 Acmlm, Emuz, et al



Page rendered in 0.013 seconds.