So, how can you port a game? I've had this question in my mind for a very long time. It might contribute to the fact that I have zero skills at programming complex languages, or maybe it is because I don't have any resources besides the game to begin with. I don't want to remake the entire thing from scratch; I want the game to be transitioned through another console instead, only through the same video game generation the console was released in(example: DC -> PS2). But that requires a lot of programming, reverse-engineering and hard work. I have to decide which console it will be ported from, which development kit to use, how to use that, etc. Basically, a port can be anything but an overhaul of the same game into another platform. Anyways, where can I start? Programming assembly, C++ or C? Any ideas?
Which is exactly what I intend to do. If I don't have the source code for the game, I would attempt to reproduce it by coding bit by bit, while also reverse-engineering all the formats used for the game so that it could be compatible into the system I'm porting to. But then it would require lots of patience and a stronger CPU/GPU/RAM to do such a task.
Maybe start with a simple port to get the hang of it. Like, pick two systems that have the same CPU but different memory maps and video/audio hardware. Once you have a better idea of the challenges involved, you can move on to harder ports. IMO, starting right off on a PS2 to GameCube port, for example, is a lot to bite off.
Don't take this the wrong way, but if you have to ask where to start with this type of question, it's probably going to be a MUCH more difficult task than you were hoping for. @arcadecollecting has the right idea with starting with a simpler port. There's a reason you don't see homebrew console ports from DC to PS2 (for example) very often - it's not an easy task.
Reproducing an engine can be quite an ordeal. My suggestion for a first port is to take some old game running on a simple processor (ex. NES), make a full disasseble of it, use macros to convert the code into a somewhat higher level language (assembly to C is a good start). From there document important pieces of the code, like hardware access and rewrite it to simulate to some degree the original hardware. While this approach still requires a ton documenting for hardware procedures, you barely need to spend time on figuring out 100% of the engine logic. Alternatively, you could try and get something a bit simpler, like some old DOS game. There is quite a good amount of disassemblers for those.