From 3507b540500efc93b4760796fe88ea3b7333749b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 08:12:14 +0000 Subject: [PATCH 1/2] Add Excessive Overkill project README Document the project goals, features, and build instructions. Includes credits to Mr. Pants and the ioquake3 team. --- README.md | 701 ++++++++++-------------------------------------------- 1 file changed, 121 insertions(+), 580 deletions(-) diff --git a/README.md b/README.md index 47a58f5d0d..e6b63af5a9 100644 --- a/README.md +++ b/README.md @@ -1,642 +1,183 @@ -![Build](https://github.com/ioquake/ioq3/workflows/Build/badge.svg) - - ,---------------------------------------. - | _ _ ____ | - | (_)___ __ _ _ _ __ _| |_____|__ / | - | | / _ \/ _` | || / _` | / / -_)|_ \ | - | |_\___/\__, |\_,_\__,_|_\_\___|___/ | - | |_| | - | | - `--------- https://ioquake3.org --------' - -The intent of this project is to provide a baseline engine which may be used -for further development and to play _Quake 3: Arena,_ _Team Arena,_ and mods. - -Our source code is at https://github.com/ioquake/ioq3 -If you aren't there, then this isn't ioquake3, it's someone else's project. - -Some of the major features currently implemented are: - - * CMake meta-build system - * SDL 2 backend - * OpenAL sound API support (multiple speaker support and better sound - quality) - * Full x86_64 support on Linux - * VoIP support, both in-game and external support through Mumble. - * MinGW compilation support on Windows - * AVI video capture of demos - * Much improved console autocompletion - * Persistent console history - * Colorized terminal output - * Optional Ogg Vorbis support - * Much improved QVM tools - * Support for various esoteric operating systems - * cl_guid support - * Web server download redirection - * Multiuser support on Windows systems (user specific game data - is stored in "%APPDATA%\Quake3") - * PNG support - * Web support via Emscripten - * console scaling with con_scale - * Many, many bug fixes - -The map editor and associated compiling tools are not included. We suggest you -use a modern copy from http://icculus.org/gtkradiant/. - -The original id software readme that accompanied the Q3 source release has been -renamed to id-readme.txt so as to prevent confusion. Please refer to the -website for updated status. - -## Just want to play ioquake3? -Check out our Player's Guide here: -https://ioquake3.org/help/players-guide/ - -## Want to run a server? -Our SysAdmin guide is here: -https://ioquake3.org/help/sys-admin-guide/ - -## Visit our forums -If you've got issues that you aren't sure are worth filing as bugs, or just -want to chat: -https://discourse.ioquake.org - -## I'm going to fork ioquake3 and do my own thing! -Please update your fork's README.md to credit the ioquake3 project and inform users -what project they're looking at so you get credit for your work. - -Feel free to make a thread on our forums to let people know about -your project. We're looking forward to hearing about it. - - -# Thank You: - -

- Digital Ocean
- -
-

---- -

-Discourse
-
-

---- -

-icculus dot org
-
-

---- -

-Nuclear Monster
-
-

- -# Compilation and installation -**Note that for all of these platforms, if you want to play _Quake 3: Arena_ or -the expansion pack, _Team Arena_, you'll still need to buy a copy of the game.** -The _Quake 3_ game source code is freely available under the GPLv2, not the game data. - -You can get links to buy and support the project here: https://ioquake3.org/buy/ - - -You can make your own mod that either requires the original game data or a new game -that does not. Please read the **Creating standalone games** section for more information -on the latter. - -For *nix, - 1. `git clone git://github.com/ioquake/ioq3.git` - 2. `cd ioq3` - 3. Install dependencies according to your operating system's instructions. - for apt-based systems, `sudo apt install cmake libsdl2-dev` - 4. `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` - 5. `cmake --build build` - 6. The resulting files will be in the `build` directory. - -For Windows, - 1. Install Visual Studio Community Edition from Microsoft. - https://visualstudio.microsoft.com/vs/community/ - 2. Install CMake https://cmake.org/cmake/download - 3. Clone our git repository either using the command-line or a GUI tool: - `git clone git://github.com/ioquake/ioq3.git` - 4. Compile using Visual Studio by selecting our CMakeLists.txt and clicking Build. - 5. Or using the command-line: `cmake -S . -B build -G "Visual Studio 17 2022"` - 6. `cmake --build build --config Release` - -For macOS, - 1. Install XCode. - 2. Install CMake via homebrew https://brew.sh or your package manager of choice. - 3. `git clone git://github.com/ioquake/ioq3.git` - 4. `cd ioq3` - 5. `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` - 6. `cmake --build build` - 7. Copy the resulting `ioquake3.app` in `/build/` - to your `/Applications/ioquake3` folder. - -For Emscripten, - 1. Follow the installation instructions for the Emscripten SDK including - setting up the environment with emsdk_env. https://emscripten.org/ - 2. `git clone git://github.com/ioquake/ioq3.git` - 3. `cd ioq3` - 4. `emcmake cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` - 5. `cmake --build build` - 3. Copy or symlink your baseq3 pk3 files into the `build/Release/baseq3` - directory so they can be loaded at run-time. Only game files listed in - `client-config.json` will be loaded. - 4. Start a web server serving this directory. `python3 -m http.server` - is an easy default that you may already have installed. - 5. Open `http://localhost:8000/build/Release/ioquake3.html` - in a web browser. Open the developer console to see errors and warnings. - 6. Debugging the C code is possible using a Chrome extension. For details - see https://developer.chrome.com/blog/wasm-debugging-2020 - -Installation, for *nix - 1. Set the CMAKE_INSTALL_PREFIX to your prefered installation directory. - By default it will be set to /opt/quake3/. - 2. `cmake --install build`. - -The following CMake variables may be set, using `-D` on the command line. +![Build](https://github.com/samifouad/overkill/workflows/Build/badge.svg) ``` - BUILD_SERVER - build the 'ioq3ded' server binary - BUILD_CLIENT - build the 'ioquake3' client binary - BUILD_RENDERER_OPENGL1 - build the opengl1 client / renderer library - BUILD_RENDERER_OPENGL2 - build the opengl2 client / renderer library - BUILD_GAME_LIBRARIES - build the game shared libraries - BUILD_GAME_QVMS - build the game qvms - BUILD_STANDALONE - build binaries suited for stand-alone games - - USE_RENDERER_DLOPEN - build and use the renderer in a library - USE_OPENAL - use OpenAL where available - USE_OPENAL_DLOPEN - link with OpenAL at runtime - USE_HTTP - enable http download support - USE_CODEC_VORBIS - enable Ogg Vorbis support - USE_CODEC_OPUS - enable Ogg Opus support - USE_MUMBLE - enable Mumble support - USE_VOIP - enable built-in VoIP support - USE_FREETYPE - enable FreeType support for rendering fonts - - USE_INTERNAL_LIBS - build internal libraries instead of dynamically - linking against system libraries; this just sets - the default for USE_INTERNAL_ZLIB etc. - USE_INTERNAL_SDL - link against internal SDL (if available) - USE_INTERNAL_ZLIB - build and link against internal zlib - USE_INTERNAL_JPEG - build and link against internal JPEG library - USE_INTERNAL_OGG - build and link against internal ogg library - USE_INTERNAL_VORBIS - build and link against internal Vorbis library - USE_INTERNAL_OPUS - build and link against internal opus/opusfile libraries - - EMSCRIPTEN_PRELOAD_FILE - set to 1 to package 'baseq3' (BASEGAME) directory - containing pk3s and loose files as a single - .data file that is loaded instead of listing - individual files in client-config.json - - CMAKE_BUILD_TYPE - on single config CMake, set to Debug or Release -``` - -The defaults for these variables may differ depending on the target platform. + _____ _ _ ____ ____ ____ ____ _ _ _ ____ ____ _ _ ____ ____ _ _ _ _ _ + |___ \/ | |___ [__ [__ | | | |___ | | | | |___ |__/ |_/ | | | + |___ _/\_ |___ |___ ___] ___] | \/ |___ |__| \/ |___ | \ | \_ | |___ |___ + Mr. Pants' Excessive Overkill for Quake III Arena - ioquake3 Edition +``` -# OpenGL ES support +## 🚀 What is This? -The opengl2 renderer (the default) supports OpenGL ES 2+. Though there -are many missing features and the performance may not be sufficient for -embedded System-on-a-Chip and mobile platforms. +This is **ioquake3** with **Mr. Pants' Excessive Overkill mod** built-in and enabled by default! -The opengl1 renderer does not have OpenGL ES support. +Based on the legendary ioquake3 engine (a modernized Quake 3 Arena) and the classic **Excessive v004** mod from 2004, this project brings back the insane, over-the-top gameplay that made Excessive servers so addictive. -The opengl2 renderer will try both OpenGL and OpenGL ES APIs to find one that -works. The `r_preferOpenGLES` cvar controls which API to try first. -Set it to -1 for auto (default), 0 for OpenGL, and 1 for OpenGL ES. It should be -set using command line arguments: +## 💥 What Makes Excessive... Excessive? - ioquake3 +set cl_renderer opengl2 +set r_preferOpenGLES 1 +- **🔫 Excessified Weapons** - All weapons are ridiculously overpowered: + - Shotgun fires twice as fast + - BFG spews short-fused grenades on impact + - Lightning Gun delivers massive explosive damage + - Plasma gun, rockets, grenades - everything is cranked to 11! +- **💚 Regenerating Health & Ammo** - Never run out, never stop fighting -# Filesystem +- **🚁 Flying Mode** - Press jump repeatedly to fly around maps (configurable joust mode) -Compared to the original release, user configuration and data files are stored -in more modern locations. If you want a different behaviour a specific path -can be provided by adding `+set fs_homepath ` to the command line. +- **🪝 Grappling Hook** - Swing around like Spider-Man -### Windows +- **⚡ Instant Weapon Switching** - No delay, pure chaos -`C:\Users\\AppData\Roaming\Quake3` +- **💣 Death Explosions** - When you die, you explode! -### macOS +- **⚔️ Quad Damage on Spawn** - Start every life with 30 seconds of quad (configurable) -`/Users//Library/Application Support/Quake3` +## 📦 Download & Install -### Linux +### Automatic Builds -`/home//.config/Quake3` Configuration files. -`/home//.local/share/Quake3` Data files (pk3s etc.). -`/home//.local/state/Quake3` Other internal runtime files. +Pre-built binaries for all platforms are available from GitHub Actions: -These directories correspond to the Free Desktop XDG Base Directory -Specification. The original release used `/home/.q3a`. This will be used if -present, however in this case a prompt will be shown suggesting migration to -the above locations, if desired. +- **macOS** (ARM64 & Intel) - `.dmg` installer +- **Windows** - `.exe` installer +- **Linux** - `.deb` package or portable binaries +- **Web Browser** - WebAssembly build (coming soon!) -# Console +[**→ Download Latest Build**](https://github.com/samifouad/overkill/actions) -## New cvars +Click on the latest successful workflow run and download the artifact for your platform. -``` - cl_autoRecordDemo - record a new demo on each map change - cl_aviFrameRate - the framerate to use when capturing video - cl_aviMotionJpeg - use the mjpeg codec when capturing video - cl_guidServerUniq - makes cl_guid unique for each server - cl_cURLLib - filename of cURL library to load (non-Windows) - cl_consoleKeys - space delimited list of key names or - characters that toggle the console - cl_mouseAccelStyle - Set to 1 for QuakeLive mouse acceleration - behaviour, 0 for standard q3 - cl_mouseAccelOffset - Tuning the acceleration curve, see below - - con_autochat - Set to 0 to disable sending console input - text as chat when there is not a slash - at the beginning - con_autoclear - Set to 0 to disable clearing console - input text when console is closed - con_scale - Scales console text to make it legible at - high resolutions. Defaults to 1. Maximum - is 4. Accepts fractional values (1.5). - con_notifylines - The number of lines to display in the - notify area - - in_joystickUseAnalog - Do not translate joystick axis events - to keyboard commands - - j_forward - Joystick analogue to m_forward, - for forward movement speed/direction. - j_side - Joystick analogue to m_side, - for side movement speed/direction. - j_up - Joystick up movement speed/direction. - j_pitch - Joystick analogue to m_pitch, - for pitch rotation speed/direction. - j_yaw - Joystick analogue to m_yaw, - for yaw rotation speed/direction. - j_forward_axis - Selects which joystick axis - controls forward/back. - j_side_axis - Selects which joystick axis - controls left/right. - j_up_axis - Selects which joystick axis - controls up/down. - j_pitch_axis - Selects which joystick axis - controls pitch. - j_yaw_axis - Selects which joystick axis - controls yaw. - - s_useOpenAL - use the OpenAL sound backend if available - s_alPrecache - cache OpenAL sounds before use - s_alGain - the value of AL_GAIN for each source - s_alSources - the total number of sources (memory) to - allocate - s_alDopplerFactor - the value passed to alDopplerFactor - s_alDopplerSpeed - the value passed to alDopplerVelocity - s_alMinDistance - the value of AL_REFERENCE_DISTANCE for - each source - s_alMaxDistance - the maximum distance before sounds start - to become inaudible. - s_alRolloff - the value of AL_ROLLOFF_FACTOR for each - source - s_alGraceDistance - after having passed MaxDistance, length - until sounds are completely inaudible - s_alDriver - which OpenAL library to use - s_alDevice - which OpenAL device to use - s_alAvailableDevices - list of available OpenAL devices - s_alInputDevice - which OpenAL input device to use - s_alAvailableInputDevices - list of available OpenAL input devices - s_sdlBits - SDL bit resolution - s_sdlSpeed - SDL sample rate - s_sdlChannels - SDL number of channels - s_sdlDevSamps - SDL DMA buffer size override - s_sdlMixSamps - SDL mix buffer size override - s_backend - read only, indicates the current sound - backend - s_muteWhenMinimized - mute sound when minimized - s_muteWhenUnfocused - mute sound when window is unfocused - sv_dlRate - bandwidth allotted to PK3 file downloads - via UDP, in kbyte/s - - com_ansiColor - enable use of ANSI escape codes in the tty - com_altivec - enable use of altivec on PowerPC systems - com_standalone (read only) - If set to 1, quake3 is running in - standalone mode - com_basegame - Use a different base than baseq3. If no - original Quake3 or TeamArena pak files - are found, this will enable running in - standalone mode - com_homepath - Specify name that is to be appended to the - home path - com_legacyprotocol - Specify protocol version number for - legacy Quake3 1.32c protocol, see - "Network protocols" section below - (startup only) - com_maxfpsUnfocused - Maximum frames per second when unfocused - com_maxfpsMinimized - Maximum frames per second when minimized - com_busyWait - Will use a busy loop to wait for rendering - next frame when set to non-zero value - com_pipefile - Specify filename to create a named pipe - through which other processes can control - the server while it is running. - Nonfunctional on Windows. - com_gamename - Gamename sent to master server in - getservers[Ext] query and infoResponse - "gamename" infostring value. Also used - for filtering local network games. - com_protocol - Specify protocol version number for - current ioquake3 protocol, see - "Network protocols" section below - (startup only) - - in_joystickNo - select which joystick to use - in_availableJoysticks - list of available Joysticks - in_keyboardDebug - print keyboard debug info - - sv_dlURL - the base of the HTTP or FTP site that - holds custom pk3 files for your server - sv_banFile - Name of the file that is used for storing - the server bans - - net_ip6 - IPv6 address to bind to - net_port6 - port to bind to using the ipv6 address - net_enabled - enable networking, bitmask. Add up - number for option to enable it: - enable ipv4 networking: 1 - enable ipv6 networking: 2 - prioritise ipv6 over ipv4: 4 - disable multicast support: 8 - net_mcast6addr - multicast address to use for scanning for - ipv6 servers on the local network - net_mcastiface - outgoing interface to use for scan - - r_allowResize - make window resizable - r_ext_texture_filter_anisotropic - anisotropic texture filtering - r_zProj - distance of observer camera to projection - plane in quake3 standard units - r_greyscale - desaturate textures, useful for anaglyph, - supports values in the range of 0 to 1 - r_stereoEnabled - enable stereo rendering for techniques - like shutter glasses (untested) - r_anaglyphMode - Enable rendering of anaglyph images - red-cyan glasses: 1 - red-blue: 2 - red-green: 3 - green-magenta: 4 - To swap the colors for left and right eye - just add 4 to the value for the wanted - color combination. For red-blue and - red-green you probably want to enable - r_greyscale - r_stereoSeparation - Control eye separation. Resulting - separation is r_zProj divided by this - value in quake3 standard units. - See also - http://wiki.ioquake3.org/Stereo_Rendering - for more information - r_marksOnTriangleMeshes - Support impact marks on md3 models, MOD - developers should increase the mark - triangle limits in cg_marks.c if they - intend to use this. - r_sdlDriver - read only, indicates the SDL driver - backend being used - r_noborder - Remove window decoration from window - managers, like borders and titlebar. - r_screenshotJpegQuality - Controls quality of jpeg screenshots - captured using screenshotJPEG - r_aviMotionJpegQuality - Controls quality of video capture when - cl_aviMotionJpeg is enabled - r_mode -2 - This new video mode automatically uses the - desktop resolution. -``` +### Requirements -## New commands +You'll need the original Quake 3 Arena game files (`pak0.pk3` from baseq3 folder). This project provides the engine and mod, but not the copyrighted game assets. -``` - video [filename] - start video capture (use with demo command) - stopvideo - stop video capture - stopmusic - stop background music - minimize - Minimize the game and show desktop - togglemenu - causes escape key event for opening/closing menu, or - going to a previous menu. works in binds, even in UI +Place your `pak0.pk3` in the `baseq3/` directory next to the executable. - print - print out the contents of a cvar - unset - unset a user created cvar +## 🎮 Quick Start - banaddr - ban an ip address range from joining a game on this - server, valid is either playernum or CIDR - notation address range. - exceptaddr - exempt an ip address range from a ban. - bandel - delete ban (either range or ban number) - exceptdel - delete exception (either range or exception number) - listbans - list all currently active bans and exceptions - rehashbans - reload the banlist from serverbans.dat - flushbans - delete all bans - - net_restart - restart network subsystem to change latched settings - game_restart - Switch to another mod +### macOS +1. Download and open the `.dmg` file +2. Drag `ioquake3-excessive.app` to Applications +3. Copy your Q3 `pak0.pk3` to `~/Library/Application Support/Quake3/baseq3/` +4. Launch and frag! - which - print out the path on disk to a loaded item +### Windows +1. Run the installer `.exe` +2. Copy your Q3 `pak0.pk3` to the installation directory's `baseq3/` folder +3. Run `ioquake3-excessive.exe` - execq - quiet exec command, doesn't print "execing file.cfg" +### Linux +1. Install the `.deb` package or extract the portable build +2. Copy your Q3 `pak0.pk3` to `~/.q3a/baseq3/` +3. Run `ioquake3-excessive` - kicknum - kick a client by number, same as clientkick command - kickall - kick all clients, similar to "kick all" (but kicks - everyone even if someone is named "all") - kickbots - kick all bots, similar to "kick allbots" (but kicks - all bots even if someone is named "allbots") +The Excessive mod loads automatically - no configuration needed! - tell - send message to a single client (new to server) +## 🎯 Server Console Variables - cvar_modified [filter] - list modified cvars, can filter results (such as "r*" - for renderer cvars) like cvarlist which lists all cvars +Server operators can customize the madness: - addbot random - the bot name "random" now selects a random bot ``` - - -# README for Developers - -## pk3dir - -_ioquake3_ has a useful new feature for mappers. Paths in a game directory with -the extension ".pk3dir" are treated like pk3 files. This means you can keep -all files specific to your map in one directory tree and easily zip this -folder for distribution. - -## 64bit mods - -If you wish to compile external mods as shared libraries on a 64bit platform, -and the mod source is derived from the id Q3 SDK, you will need to modify the -interface code a little. Open the files ending in _syscalls.c and change -every instance of int to intptr_t in the declaration of the syscall function -pointer and the dllEntry function. Also find the vmMain function for each -module (usually in cg_main.c g_main.c etc.) and similarly replace the return -value in the prototype with intptr_t (arg0, arg1, ...stay int). - -Add the following code snippet to q_shared.h: - -```c -#ifdef Q3_VM -typedef int intptr_t; -#else -#include -#endif +ex_instant 0/1 - Instant weapon changing (default: 1) +ex_quadstart 0/1 - Quad damage on spawn (default: 1) +ex_joust 0/1/2 - Flying mode: 0=off, 1=full fly, 2=enhanced jump (default: 2) +ex_quadfly 0/1 - Quad users can fly (default: 1) +ex_motd - Custom MOTD file (default: motd.cfg) +ex_ 0/1 - Enable/disable specific weapons +ex_spawn - Set spawn weapon (default: auto) ``` -Note if you simply wish to run mods on a 64bit platform you do not need to -recompile anything since by default Q3 uses a virtual machine system. - -## Creating mods compatible with Q3 1.32b - -If you're using this package to create mods for the last official release of -Q3, it is necessary to pass the commandline option '-vq3' to your invocation -of q3asm. This is because by default q3asm outputs an updated qvm format that -is necessary to fix a bug involving the optimizing pass of the x86 vm JIT -compiler. - -## Creating standalone games - -Have you finished the daunting task of removing all dependencies on the Q3 -game data? You probably now want to give your users the opportunity to play -the game without owning a copy of Q3, which consequently means removing cd-key -and authentication server checks. In addition to being a straightforward Q3 -client, _ioquake3_ also purports to be a reliable and stable code base on which -to base your game project. - -However, before you start compiling your own version of _ioquake3_, you have to -ask yourself: Have we changed or will we need to change anything of importance -in the engine? - -If your answer to this question is "no", it probably makes no sense to build -your own binaries. Instead, you can just use the pre-built binaries on the -website. Just make sure the game is called with: - - +set com_basegame - -in any links/scripts you install for your users to start the game. The -binary must not detect any original quake3 game pak files. If this -condition is met, the game will set com_standalone to 1 and is then running -in stand alone mode. - -If you want the engine to use a different directory in your homepaths than -"Quake3" then set a new name at startup by adding - - +set com_homepath - -to the command line. You can also control which game name to use when talking -to the master server: - - +set com_gamename - -So clients requesting a server list will only receive servers that have a -matching game name. - -Example line: - - +set com_basegame basefoo +set com_homepath foo - +set com_gamename foo - -If you really changed parts that would make vanilla ioquake3 incompatible with -your mod, we have included another way to conveniently build a stand-alone -binary. Edit /cmake/identity.cmake and run cmake with the option BUILD_STANDALONE=1. -Don't forget to edit the PRODUCT_NAME and subsequent #defines in qcommon/q_shared.h with -information appropriate for your project. - -## Standalone game licensing +Commands: +``` +ex_reset - Reset all weapon settings to defaults +ex_clear - Disable all weapons +ex_settings - Show current weapon configuration +``` -While a lot of work has been put into _ioquake3_ that you can benefit from free -of charge, it does not mean that you have no obligations to fulfill. Please be -aware that as soon as you start distributing your game with an engine based on -our sources we expect you to fully comply with the requirements as stated in -the GPL. That includes making sources and modifications you made to the -ioquake3 engine as well as the game-code used to compile the .qvm files for -the game logic freely available to everyone. Furthermore, note that the "QIIIA -Game Source License" prohibits distribution of mods that are intended to -operate on a version of Q3 not sanctioned by id software: +## 🌐 Browser Version (Coming Soon!) - "with this Agreement, ID grants to you the non-exclusive and limited right - to distribute copies of the Software ... for operation only with the full - version of the software game QUAKE III ARENA" +This project includes WebAssembly/Emscripten builds, bringing Excessive Overkill to your browser! Stay tuned for: +- No installation required +- Play anywhere, any device +- Hosted version with click-to-play -This means that if you're creating a standalone game, you cannot use said -license on any portion of the product. As the only other license this code has -been released under is the GPL, this is the only option. +## 🏗️ Building from Source -This does NOT mean that you cannot market this game commercially. The GPL does -not prohibit commercial exploitation and all assets (e.g. textures, sounds, -maps) created by yourself are your property and can be sold like every other -game you find in stores. +### Prerequisites +- CMake 3.25+ +- C99 compiler (GCC, Clang, MSVC) +- SDL2 development libraries +- Ninja (recommended) or Make +### Build Commands -## PNG support +```bash +# Clone the repository +git clone https://github.com/samifouad/overkill.git +cd overkill -ioquake3 supports the use of PNG (Portable Network Graphic) images as -textures. It should be noted that the use of such images in a map will -result in missing placeholder textures where the map is used with the id -Quake 3 client or earlier versions of ioquake3. +# Configure +cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -Recent versions of GtkRadiant and q3map2 support PNG images without -modification. However GtkRadiant is not aware that PNG textures are supported -by ioquake3. To change this behaviour open the file 'q3.game' in the 'games' -directory of the GtkRadiant base directory with an editor and change the -line: +# Build +cmake --build build - texturetypes="tga jpg" +# Binaries will be in build/Release/ +``` -to +### Emscripten/WebAssembly Build - texturetypes="tga jpg png" +```bash +# Install emsdk first: https://emscripten.org/docs/getting_started/downloads.html -Restart GtkRadiant and PNG textures are now available. +emcmake cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release +cmake --build build +``` -## Building with MinGW for pre Windows XP +## 📜 Credits -IPv6 support requires a header named "wspiapi.h" to abstract away from -differences in earlier versions of Windows' IPv6 stack. There is no MinGW -equivalent of this header and the Microsoft version is obviously not -redistributable, so in its absence we're forced to require Windows XP. -However if this header is acquired separately and placed in the qcommon/ -directory, this restriction is lifted. +**Excessive Overkill Mod** +- Created by: Dan "Mr. Pants" Schoenblum (2000-2004) +- Original Homepage: planetquake.com/excessive +- License: Freely distributable +**ioquake3 Engine** +- The ioquake3 Team +- https://ioquake3.org +- License: GNU GPL v2 -# Contributing +**Original Quake 3 Arena** +- id Software (1999-2000) +- Copyright © 1999-2000 id Software, Inc. -Please submit patches through GitHub pull requests. +**This Fork** +- Integration and modernization work +- GitHub Actions automation +- WebAssembly port planning -The focus for ioq3 is to develop a stable base suitable for further development -and provide players with the same Quake 3 experience they've had for years. +## 📄 License -We do have graphical improvements with the new renderer, but they are off by default. -See opengl2-readme.md for more information. +This project inherits the GNU General Public License v2 from ioquake3. -# Credits +The Excessive Overkill mod is freely distributable as per the original author's terms. -Maintainers +Quake 3 Arena game assets (pak files) are copyright id Software and not included. - * Tim Angus - * Jack "Mr. Nuclear Monster" Slater +## 🔗 Links -Former Maintainers +- **Source Code**: https://github.com/samifouad/overkill +- **ioquake3 Upstream**: https://github.com/ioquake/ioq3 +- **Original Excessive Mod**: Archive at planetquake.com/excessive +- **Quake 3**: https://store.steampowered.com/app/2200/Quake_III_Arena/ - * James Canete - * Ludwig Nussel - * Thilo Schulz - * Tony J. White - * Zack Middleton +## 🎪 Community -Significant contributions from +This is a passion project bringing back a beloved mod from 2004. If you played on Excessive servers back in the day, welcome home! 🏠 - * Ryan C. Gordon - * Andreas Kohn - * Joerg Dietrich - * Stuart Dalton - * Vincent S. Cojot - * optical - * Aaron Gyes - * surrealchemist +Issues, suggestions, and pull requests welcome! +--- +*"Because regular Quake 3 just wasn't excessive enough."* - Mr. Pants From 206f9f1b8e6da9f886c333ce68ac6659dc6559f8 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 18 Nov 2025 08:54:47 +0000 Subject: [PATCH 2/2] Fix Excessive mod not loading - revert BASEGAME to baseq3 The issue was that BASEGAME was set to 'excessive', causing vanilla game modules to be built into the excessive/ folder instead of baseq3/. The game correctly loaded fs_game='excessive' but found vanilla QVMs. Changes: - Revert BASEGAME to 'baseq3' (vanilla modules build there) - Keep fs_game default as 'excessive' (loads the mod) - Disable building game modules by default (using pre-compiled Excessive QVM) - Add install rules to package the real Excessive mod files Now the excessive/ folder will only contain the authentic 2004 Excessive Overkill mod QVM, not vanilla game modules. --- CMakeLists.txt | 14 ++++++++++++-- cmake/identity.cmake | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c7336b36d..664764fdae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,8 @@ option(BUILD_SERVER "Build dedicated server" ON) option(BUILD_CLIENT "Build client" ON) option(BUILD_RENDERER_GL1 "Build GL1 renderer" ON) option(BUILD_RENDERER_GL2 "Build GL2 renderer" ON) -option(BUILD_GAME_LIBRARIES "Build game module libraries" ON) -option(BUILD_GAME_QVMS "Build game module qvms" ON) +option(BUILD_GAME_LIBRARIES "Build game module libraries" OFF) +option(BUILD_GAME_QVMS "Build game module qvms" OFF) option(BUILD_STANDALONE "Build binaries for standalone games" OFF) option(USE_RENDERER_DLOPEN "Dynamically load the renderer(s)" ON) @@ -96,4 +96,14 @@ include(basegame) include(missionpack) include(post_configure) + +# Install the Excessive mod files +install(DIRECTORY ${CMAKE_SOURCE_DIR}/excessive/ + DESTINATION excessive + FILES_MATCHING + PATTERN "*.qvm" + PATTERN "*.cfg" + PATTERN "*.txt" + PATTERN "*.pk3") + include(installer) diff --git a/cmake/identity.cmake b/cmake/identity.cmake index 4115f2ca6e..22c7be3822 100644 --- a/cmake/identity.cmake +++ b/cmake/identity.cmake @@ -4,7 +4,7 @@ set(PROJECT_VERSION 1.36) set(SERVER_NAME ioq3ded-excessive) set(CLIENT_NAME ioquake3-excessive) -set(BASEGAME excessive) +set(BASEGAME baseq3) set(CGAME_MODULE cgame) set(GAME_MODULE qagame)