Have you considered using stuff like SDLnet and FMOD for network and sound?
Yes. I don't like SDL at all. FMOD is a possibility. However, I've done a lot of sample programming with DirectX for sound mixers and whatnot. Chances are I'm going to create the code for the sound processing myself. If someone wants to use SDL or FMOD for input/sound in a port, they would just simply need to make the new calling conventions within the abstraction classes... simple enough.
The big reason why I don't want to use SDL is because on Win32 systems, there is a lot of potential overhead. It uses DirectX for Win32 so why wouldn't I just use DirectX myself? I don't have to go through a series of library calls or extra function calls just to call a DirectX function. I didn't like it the first time I used it I doubt I'll like it the second time I use it. Besides, DirectX has moved quite fast from the joke that it was in version 1.0 to a highly sophisticated, highly optimized HAL that works all-to-well.
Also, one note about the way the program will start (the int main() function, or rather the WinMain() function), is that it will be created for use under a Win32 environment (hence the WinMain()). This should be easy enough to change while porting because I don't think I'm going to create any win-specific stuff except for the WinMain and WndProc functions. Besides, the WinMain function will simply call the Init functions for each system (Refresh, Sound, Input, Network, Logic) and then call a GameInit function.
While I'm at it I'll just describe the way the program will start.
Basically, once the program starts, it will call up the default Refresh, Sound, Input and Network plug-ins (I love plug-ins... makes changes and updates TOOOOOO easy!). The Logic module will not be loaded until just before the actual game starts.
The user will be able to make changes to various settings like Graphic Quality, Sound Quality, Network Settings and Player Setup (color, name, colony, etc.). The user will also be able to select which GameX86.DLL file to load (the gamex86.dll file is the Logic Module... I assume that other systems will have different extensions than *.DLL so the Plug-In loaders will also be wrapped up into abstraction classes). After the player has selected the Logic module to load (by default, GAMEX86 will be loaded from the DATA directory), the game will initialize its Logic module and begin.
As the user will be able to choose different Sound/Input/Network plug-ins, these will all be loaded at run-time. The user will not have to restart the game for the new plug-in to start. If the plug-in fails to load, the default plug-in will be started. If that fails then the game will terminate and the user will be given approriate error messages.
I'd say it's a pretty fluid system with a lot of potential if I can get it to work right. It will allow for MOD's to OP3 to be developed and deployed very easily and will also make it easy for the user to to install and play new MOD's. I don't plan to do all of this myself as it would take years to complete an engine of this calibur on my own,
especially since this is hobby-work. I will eventually be calling on the help of others from OPU as well as other game programming forums (such as GameDev.net) when I have the framework for the engine set up and working. So hopefully I have some really interested people looking to be part of a large project! B)