If anyone's kept up with the development of id games throughout the years (especially Quake3), you will find out that a majority of the game is written in assembly and C/C++ (mainly C). The assembly code is used for a lot of the graphics, sound, controls, etc simply because its the fastest and most accurate way to get information to and from the system. The C/C++ code deals with interface, specific OS handles, etc. The only time the assembly gets changed is when the platform is the Mac. With Win32/Linux, assembly is the same, so the hand optimization is really, really key.
For Unreal/Unreal Tournament, its Win32 C++ -- all the interviews from the authors state that Win32/C++ was the development OS. Its no surprise that it was ported to Linux though -- good code can be ported pretty quickly.
vash