Definitely. FCEUXD (or FCEUXD SP, which I suppose it probably better. I wouldn't know because I've not used it, but I think it has support for conditional breakpoints) is the one to use. Don't touch NESticle unless you have an absolutely shitacular computer that really can't run anything else. It's both horribly inaccurate and crappy, and there are other emulators that do everything it does and better (read: FCEUXD), so there is no reason to do it. It's a shame that so many people still use that incredibly outdated program.
Additionally, RockNES won't help you much with anything beside just playing the game. I think it has a ROM patching feature that lets you hex edit on the fly, but FCEUXD also has this feature AND does it better than RockNES. RockNES isn't bad, but it's not totally featureful.
With FCEUXD, you can view currently loaded graphics (PPU viewer), view the nametables (the currently loaded backgrounds), hex edit on the fly, find RAM addresses with a very useful cheat console, and set breakpoints in the debugger, among other things. If you choose to use FCEUXD's neat features as opposed to just searching through the ROM with a corruptor or something of that sort, you'll be using the hex editor, PPU viewer, and debugger a lot. The debugger lets you find the code that writes to or reads from certain addresses, as well as find when certain code is run. It's incredibly useful; you can find out where the game is getting certain values from (so you can find tables of values or just the LDA #$xx opcode that is defining some sort of important value) or locate certain code that does specific things. The hex editor is a good way to see what something does without having to save in a hex editor, reopen the ROM, and go back to where you were. Just make a change in the hex editor and next time that data is loaded, it will be different. You can edit the ROM in the hex editor as well as RAM. It's really useful.
As I said, I have some Kid Icarus data, if you decide to look into it. I won't guarentee the validity of this data because it's been a very, very long time since I wrote this stuff down (looks like a lot of the addresses are 1 byte early, since a bunch of them appear on an FF when they should actually appear on the *next* byte. Oops. I'm sure you'll figure it out), but what I have that isn't marked with a question mark should be mostly right.
-----
Kid Icarus
1A691- 1-1 enemy data?
19A0C- 1-1, screen 1. Format- Color, Location (yx), Type. FF denotes the end of a screen.
19A5A- 1-1, screen 2
19C59- 1-2, screen 1
19E7E- 1-3, screen 1
B0F5- 2-1, screen 1
B2E4- 2-2, screen 1
B515- 2-3, screen 1
1A857- 3-1, screen 1
1A97A- 3-2, screen 2
1AA1B- 3-3, screen 1
FAFE- 4-1, screen 1
15C16- Maze Data start. Format- Location (yx), Type, Color. FF denotes the end of a screen, each screen starts with 1 unknown byte.
15E65- Maze room
1A1B9- VSSA data start, 1-x
1A2EC- TSA tile makeup, 1-x
B82C- VSSA data start, 2-x
B940- TSA tile makeup, 2-x
1ABC5- VSSA data start, 3-x
1AC77- TSA tile makeup, 3-x
FBFC- VSSA data start, 4-1
FCB8- TSA tile makeup, 4-1
1626C- VSSA data start, x-4
1631E- TSA tile makeup, x-4
-----
I find it very bizarre that the level format for the maze and standard stages are so different, but I do remember finding that to be the case. You might want to look into confirming that, if you do decide to go with this game. Furthermore, screens in this game end with FDFF, not just FF (as my ancient notes say). Kid Icarus uses the same engine as Metroid, and Metroid's format ends object data for each screen with FD and then has sprite data for enemies and doors, which is terminated with FF. Kid Icarus uses a different sprite format; instead of making it so that sprites hardcoded in each screen, they are told to appear on certain screens in the level. This means that you can repeat a screen without repeating the sprite data, unlike in Metroid. If *all* screens in Kid Icarus are indeed terminated with FDFF (so there is never any data between the FD and FF), the code could be changed so that it no longer looks for FD, but rather only for FF, which would free up a bit of space for new objects since screens would only need to end in FF. It's strange that they would leave in the FD if it's never used, though.
Anyway, yeah. Go ahead and play around with that data. I'm not sure it's 100% accurate, but glancing at the data, it seems more or less right. Also, for the VSSA stuff, you have TSA data that defines the 16x16 blocks (simple enough. It's probably 4 bytes per block, one for each of the 4 tiles that make up each block) and then VSSA data that creates objects out of those 16x16 blocks. VSSA data is pretty simple. You have rows of blocks, each row being of some length defined by the first byte of that row. So the first byte of an object (and note that it looks like some of my addresses for VSSA data are off by 1 byte, again. Ugh. If the address has FF as the value, go to the next byte. I don't know what I was thinking) is the length of the first row. If it's 01, then there is 1 block in that row. I'm not sure if you can do a 00 row; I recall that not being done in Metroid, so it's probably not possible (00 might be counted as 256). So you'll have 01xx where xx is the ID of the block in that row. After 01xx, you'll have another row, which is the exact same format. Maybe the first byte here is 04, so then the next 4 bytes will be the row, so you'll have 04aabbccdd. Maybe you don't want any more rows in this object, so you'll want to terminate it. You do that with FF. The end result of this 01xx04aabbccddFF object is this:
xx
aabbccdd
It'll be an object of that shape with 5 blocks (defined in the TSA data) whose IDs are denoted by those 2 digit values. I doubt you'll find this too difficult. What might be difficult is making a good editor for it.
Hope that all helps. Let me know if you have any questions.