Need some quick answers for your technical questions?  You can find them here.

     
       
Quake II .NET


Why do I get the error “Couldn’t load pics/colormap.pcx” when I try to run Quake II .NET?
This means Quake cold not find the data PAK file. You should verify that the baseq2 folder for the managed and native versions contain the pak0.pak file. See post install for more information on installing this file.


Why do I have to download the Quake II demo?

There are two components to Quake: the game engine and data files. The game engine is available under the GNU General Public License ("GPL") and can be modified and redistributed. The game data (PAK and related files) cannot be redistributed and must be installed by downloading the Quake demo or purchasing the Quake retail version.

A list of alternative download sites is at:
http://www.fileaholic.com/cgi-sql/file-download.sql/12433

The file size is 38 meg.


Where can I download the original Quake II source code?

The original Quake II code is available from Id Software at:
ftp://ftp.idsoftware.com/idstuff/source/quake2.zip


Where can I download Quake II .NET?

You can download the Quake II .NET files here. This contains the source code and runtime files for the native and managed versions of Quake II .NET.


How do I build Quake II. NET?

Building the code is straightforward but you need to copy the generated EXE and DLLs to the runtime before running the app. The steps are outlined below:

  1. Unzip the Quake II .NET source ZIP. This contains the Quake code ported to Microsoft® Visual C++® .NET 2003.

  2. Open the quake2.sln file.

  3. Select the target configuration (release or debug, native or managed) and build the solution. Files are generated in the specified build configuration (Release Managed for example).

  4. Copy the engine files from the source location to the Quake II .NET runtime installation (the default folder is %ProgramFiles%\Quake II .NET).


What are the requirements to run Quake II .NET?
The system requirements are:

  • Windows 95, NT or XP for the native version
  • .NET Framework 1.1 for the managed version
  • Pentium 90 MHz
  • 16 MB RAM
  • 50 MB hard disk space
  • Sounds Blaster compatible soundcard
  • Access to local network or Internet for multiplayer mode


What are the requirements to build Quake II .NET?
Visual Studio .NET 2003 is required to build Quake II .NET.


Can I modify the Quake II .NET source code?

Yes, you are free to modify the Quake II. NET source code as long as you follow the GNU General Public License agreement. You can read the accompanying readme.txt and gnu.txt files for more information on the GNU license.


Does Quake II .NET work with other PAK files?
It should work with other PAK files but we have only tested with the pak0.pak file that is installed with the Quake II demo.


What problems did you encounter porting to .NET?

Porting to .NET had two issues: porting the C code to C++ and porting the native C++ code to managed C++. Porting to native C++ took the majority of time; the following shows the main issues that were encountered and the time spent on each issue:

  • Strong typing / casting – 70%
  • Using COM objects – 10%
  • Mixing DLL loading problem – 10%
  • Passing STL vector to managed assembly – 5%
  • Forward declaration exception – 5%


What is the advantage to getting the app in .NET?

The main advantage is you have complete control over the design. You can pick and choose what features to use and when to use them. For example:

  • Manage memory allocations yourself or use CLR garbage collection.
  • Call Window APIs directly or use .NET methods.
  • Use existing libraries or .NET classes.
  • Easily expose or consume other .NET assemblies written in different languages.


How did you extend the Quake engine?
We wanted to display a radar of items in the Quake world (monsters, health, weapons, etc.).

  • First, we figured out the integration point in the Quake code to get the information we wanted. This includes the player position, angle player is facing, and location of elements around the player.
  • Next, we packaged up the items in a list so it could be sent to the radar component. We could have used an array but we wanted to demonstrate passing an STL vector list.
  • Finally, we added a new command to the Quake vocabulary called radar so the user can hide or show the radar window.

After integrating with Quake, we created a radar .NET assembly.

  • Used Visual Studio .NET 2003 to create a .NET assembly written in managed C++.
  • Used the C++ Forms designer to create the radar window.
  • Created a simple class (Radar::Console) that controls the lifetime of the window (Radar::RadarForm) and exposes methods that the Quake code uses.


How is the performance of the managed version?
Initially, the managed version was faster than the native version when the default processor optimization setting /G5 (Pentium) was used. Changing the optimization setting to /G7 (Pentium 4 and Above) created a native version that runs around 15% faster then the managed version.

Note, the assembly code was disabled for the native and managed versions so both versions are slower than the original Quake version.


Known issues
The following are known issues with Quake II .NET.

  • Displaying the radar when running in full screen mode creates an invalid color palette. You should not display the radar when in full screen. The Quake code could be modified to prevent this.


   
Copyright © 2003 Vertigo Software, Inc.
Quake II and Quake are registered trademarks of id Software.


  
  Quake II .NET Setup
  Install and Demo tips
  Developer Whitepaper
  Source Code