Thanks L5J, I'm happy the tutorials and info has been useful!
What I would do is try to make things as generic as possible. Hopefully someone here that has made a local on one machine multiplayer will chime in.
If I had to do it this is what I would invision. What you want to do is have a function that says if "player X" is pressing then do X. Everything in that function will then take action on things that relate to player X. For example, an array with X being an index into the stats, power, skills, etc for that particular player.
For example, let's say the player 2 wants to cast the "fire" spell. They hit some button to switch to the "fire" spell. This calls a generic function to set an array index value (to "fire") based on the the player #. Then when that player in the future cast a spell. This calls a generic cast function which is called with a parameter which is the player #. You set the player number by checking a range of keys pressed or certain keys pressed. That would be some of the only code that is player specific.
Now, you may run into synchronization issues where two players are trying to cast spells at the same time.. but it is worth experimenting like that. You may need to have more complex logic to handle that case. So to summarize.. lots of generic functions