I have a strong programming and computer science background so I think i should be able to pick up on it pretty quick.
If you have programming experience you already have an advantage over many other people who have come in the game. Understanding how programs are arranged not only gives you an idea of how much work would go into hacking the game a specific way, but also may give you ideas on how information might be stored in the ROM.
What I wanted to know were the limits in possibilities of rom hacking. I see alot of people alter graphics and levels. With enough skill and knowledge would it be possible to change any element in a rom?
Anything the target system can do, you can have your hack do. Nothing is so much "impossible" unless the original system couldn't do it. Some things may take a ridiculous amount of work, though, making them impractical.
Can you gain access to the actual source code of the game, or is it just executable files impossible to reverse engineer?
You can get a disassembly, which isn't quite the same as the source (the source would have comments, variable names, etc -- whereas the disassembly would just have raw addresses and no comments)
But yes -- you can edit that assembly to add in your own code to make the game do pretty much whatever you want.
Would it be possible to use the game engine from say super mario 3, and run a server to have multiple players enter a level?
Not through ROM hacking.
Keep in mind that emulation mimics a target system (in this case, the NES). So having a game connect to a server isn't going to happen because the NES didn't allow games to connect to the internet.
But can you put in 2P coop? Sure. Though both players have to share the same screen, so this is probably one of those impractical ideas.
I'm at a loss to recommend introductory tutorials and stuff. It's been such a long time since I've been a newb that I don't really know what is useful to newcomers anymore. If you have experience with a programming language already, you may want to just dive right into assembly (compared to something like C/C++, 6502 assembly is incredibly simple). Perhaps pick up
Doppleganger's SMB disassembly as an example of how games are arranged and some
6502 docs :thumbsup: