Giter Site home page Giter Site logo

ioquake / ioq3 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from id-software/quake-iii-arena

2.3K 130.0 522.0 81.91 MB

The ioquake3 community effort to continue supporting/developing id's Quake III Arena

Home Page: https://www.ioquake3.org/

License: GNU General Public License v2.0

C 97.48% CMake 0.22% Assembly 0.31% Objective-C 0.14% GLSL 0.30% HTML 0.35% Shell 0.25% Makefile 0.41% NSIS 0.05% Yacc 0.02% Roff 0.10% Perl 0.05% Rich Text Format 0.01% VBScript 0.01% AMPL 0.01% C++ 0.31%
fps fps-game fps-engine game game-development game-engine game-engine-3d game-engine-development quake3 quake-3 hacktoberfest

ioq3's Introduction

Build

               ,---------------------------------------.
               |   _                     _       ____  |
               |  (_)___  __ _ _  _ __ _| |_____|__ /  |
               |  | / _ \/ _` | || / _` | / / -_)|_ \  |
               |  |_\___/\__, |\_,_\__,_|_\_\___|___/  |
               |            |_|                        |
               |                                       |
               `--------- https://ioquake3.org --------'

The intent of this project is to provide a baseline Quake 3 which may be used for further development and baseq3 fun. Some of the major features currently implemented are:

  • 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 and cross compilation support on Linux
  • 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
  • HTTP/FTP download redirection (using cURL)
  • Multiuser support on Windows systems (user specific game data is stored in "%APPDATA%\Quake3")
  • PNG support
  • Web support via Emscripten
  • 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.

More documentation including a Player's Guide and Sysadmin Guide are on: https://ioquake3.org/help/

If you've got issues that you aren't sure are worth filing as bugs, or just want to chat, please visit our forums: https://discourse.ioquake.org

Thank You:

Digital Ocean

---

Discourse

---

icculus dot org

---

Nuclear Monster

Compilation and installation

For *nix

  1. Change to the directory containing this readme.
  2. Run 'make'.

For Windows,

  1. Please refer to the excellent instructions here: https://ioquake3.org/help/building-ioquake3/

For macOS, building a Universal Binary (macOS 10.5 to 10.8, x86_64, x86, ppc)

  1. Install MacOSX SDK packages from XCode. For maximum compatibility, install MacOSX10.5.sdk and MacOSX10.6.sdk.
  2. Change to the directory containing this README file.
  3. Run './make-macosx-ub.sh'
  4. Copy the resulting ioquake3.app in /build/release-darwin-universal to your /Applications/ioquake3 folder.

For macOS, building a Universal Binary 2 (macOS 10.9+, arm64, x86_64)

  1. Install MacOSX SDK packages from XCode. Building for arm64 requires MacOSX11.sdk or later.
  2. Change to the directory containing this README file.
  3. Run './make-macosx-ub2.sh'
  4. Copy the resulting ioquake3.app in /build/release-darwin-universal2 to your /Applications/ioquake3 folder.

For Web, building with Emscripten

  1. Follow the installation instructions for the Emscripten SDK including setting up the environment with emsdk_env.
  2. Run emmake make debug (or release).
  3. Copy or symlink your baseq3 pk3 files into the build/debug-emscripten-wasm32/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/debug-emscripten-wasm32/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 COPYDIR variable in the shell to be where you installed Quake 3 to. By default it will be /usr/local/games/quake3 if you haven't set it. This is the path as used by the original Linux Q3 installer and subsequent point releases.
  2. Run 'make copyfiles'.

It is also possible to cross compile for Windows under *nix using MinGW. Your distribution may have mingw32 packages available. On debian/Ubuntu, you need to install 'mingw-w64'. Thereafter cross compiling is simply a case running 'PLATFORM=mingw32 ARCH=x86 make' in place of 'make'. ARCH may also be set to x86_64.

The following variables may be set, either on the command line or in Makefile.local:

  DEPEND_MAKEFILE      - set to 0 to disable rebuilding all targets when
                         the Makefile or Makefile.local is changed
  CFLAGS               - use this for custom CFLAGS
  V                    - set to show cc command line when building
  DEFAULT_BASEDIR      - extra path to search for baseq3 and such
  BUILD_SERVER         - build the 'ioq3ded' server binary
  BUILD_CLIENT         - build the 'ioquake3' client binary
  BUILD_BASEGAME       - build the 'baseq3' binaries
  BUILD_MISSIONPACK    - build the 'missionpack' binaries
  BUILD_GAME_SO        - build the game shared libraries
  BUILD_GAME_QVM       - build the game qvms
  BUILD_STANDALONE     - build binaries suited for stand-alone games
  SERVERBIN            - rename 'ioq3ded' server binary
  CLIENTBIN            - rename 'ioquake3' client binary
  USE_RENDERER_DLOPEN  - build and use the renderer in a library
  BUILD_RENDERER_OPENGL1 build the opengl1 client / renderer library
  BUILD_RENDERER_OPENGL2 build the opengl2 client / renderer library
  USE_YACC             - use yacc to update code/tools/lcc/lburg/gram.c
  BASEGAME             - rename 'baseq3'
  BASEGAME_CFLAGS      - custom CFLAGS for basegame
  MISSIONPACK          - rename 'missionpack'
  MISSIONPACK_CFLAGS   - custom CFLAGS for missionpack (default '-DMISSIONPACK')
  USE_OPENAL           - use OpenAL where available
  USE_OPENAL_DLOPEN    - link with OpenAL at runtime
  USE_CURL             - use libcurl for http/ftp download support
  USE_CURL_DLOPEN      - link with libcurl at runtime
  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.
                         and USE_LOCAL_HEADERS
  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_OPUS    - build and link against internal opus/opusfile libraries
  USE_INTERNAL_VORBIS  - build and link against internal Vorbis library
  USE_LOCAL_HEADERS    - use headers local to ioq3 instead of system ones
  DEBUG_CFLAGS         - C compiler flags to use for building debug version
  COPYDIR              - the target installation directory
  TEMPDIR              - specify user defined directory for temp files
  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

The defaults for these variables differ depending on the target platform.

OpenGL ES support

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.

The opengl1 renderer does not have OpenGL ES support.

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:

ioquake3 +set cl_renderer opengl2 +set r_preferOpenGLES 1

Console

New cvars

  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
  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

  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.

New commands

  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

  print                   - print out the contents of a cvar
  unset                   - unset a user created cvar

  banaddr <range>         - ban an ip address range from joining a game on this
                            server, valid <range> is either playernum or CIDR
                            notation address range.
  exceptaddr <range>      - exempt an ip address range from a ban.
  bandel <range>          - delete ban (either range or ban number)
  exceptdel <range>       - 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 <fs_game>  - Switch to another mod

  which <filename/path>   - print out the path on disk to a loaded item

  execq <filename>        - quiet exec command, doesn't print "execing file.cfg"

  kicknum <client number> - 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")

  tell <client num> <msg> - send message to a single client (new to server)

  cvar_modified [filter]  - list modified cvars, can filter results (such as "r*"
                            for renderer cvars) like cvarlist which lists all cvars

  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:

#ifdef Q3_VM
typedef int intptr_t;
#else
#include <stdint.h>
#endif

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 <yournewbase>

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 homepath than e.g. "Quake3" on Windows or ".q3a" on Linux, then set a new name at startup by adding

+set com_homepath <homedirname>

to the command line. You can also control which game name to use when talking to the master server:

+set com_gamename <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. Just run make 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

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:

"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 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.

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.

PNG support

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.

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:

texturetypes="tga jpg"

to

texturetypes="tga jpg png"

Restart GtkRadiant and PNG textures are now available.

Building with MinGW for pre Windows XP

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.

Contributing

Please send all patches to bugzilla (https://bugzilla.icculus.org), or as a GitHub pull request and submit your patch there.

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.

We do have graphical improvements with the new renderer, but they are off by default. See opengl2-readme.md for more information.

Credits

Maintainers

Significant contributions from

ioq3's People

Contributors

cmf028 avatar ec- avatar ensiform avatar icculus avatar inolen avatar jdarpinian avatar jeremiah-sypult avatar jonathangray avatar kungfooman avatar lnussel avatar lonkamikaze avatar man-at-arms avatar maxcrofts avatar mickael9 avatar miried avatar nuclearmonster avatar pan7 avatar rawr51919 avatar richard-allen avatar shearer12345 avatar smcv avatar smiletheory avatar thiloschulz avatar timangus avatar tjdub avatar tkoeppe avatar tomkidd avatar wolfwings avatar xhairball avatar zturtleman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ioq3's Issues

Input sampled on wrong side of frame limiter

Test:

  • com_maxfps 1 in front of a spinning item pickup
  • Move mouse between frame updates

Expected behavior:

  • Cursor moves on the very next frame update

Gotten behavior:

  • Cursor moves on the frame update after that

The actual issue, from what I can tell, is that the framerate limiter is part of the thinking code itself, and the input is outside of that. Either IN_Frame would have to be shoved inside of Com_Frame, out of logical scope, or Com_Frame would have to be split up to different functions between framerate limiting and "thinking".

Why is this an issue? Some mods, like CPMA, forcibly limit framerate online. CPMA limits framerate to 125. This forces the total average input latency from the game to always be 12ms. On a machine with infinite processing power, with input sampled on the right side of the framerate limiter, the added input latency from 125fps should be 4ms, or half of the frame time, for continuous inputs. The difference is the 8ms added by basically delaying inputs for up to 1/125th of a second due to sampling them on the wrong side of the frame limiter. The added lag decreases as the FPS cap approaches the com_maxfps 0 framerate, but it's always there.

input -> limiter -> think -> repeat

The limiter sleeps between taking inputs and using them.

limiter -> input -> think -> repeat

The limiter correctly extends the thinking time on the end instead of the beginning.

Renderer: potential buffer overrun if not enough space for swap buffers command

The following comes from code/renderergl1/tr_cmds.c in RE_EndFrame:

    cmd = R_GetCommandBuffer( sizeof( *cmd ) );
    if ( !cmd ) {
        return;
    }
    cmd->commandId = RC_SWAP_BUFFERS;

    R_IssueRenderCommands( qtrue );

If R_GetCommandBuffer returns NULL, then the swap buffers command cannot be added to the command buffer, and RE_EndFrame returns early. As the render commands are never executed (and the command buffer size is not reset), the tr.refdef.drawSurfs array is continually appended to every "frame", until tr.refdef.numDrawSurfs exceeds MAX_DRAW_SURFS and the game potentially crashes.

R_IssueRenderCommands looks like it ignores whether swap buffers happens and simply appends the end of list command, executes the commands, and then resets the command buffer. Even if this was called early to reset the command buffer, it would still be an issue because none of the subsequent frames are swapped and the player would just see the last frame that was swapped.

Where is bspc?

The upstream source release of the idtech3 engine contains the bspc command-line tool in code/bspc. Why isn't it also part of ioq3? The closest I could find is this repository: https://github.com/bnoordhuis/bspc

But it has a lot of overlap with ioq3, requiring code duplication and hackery, and it doesn't seem to have been updated in two years. Would it be possible to integrate that repository into this one? After all, all the code comes from the same source and is under the same license.

RoQ2 tools ?

Does ioq3 support RoQ/RoQ2 ?

If so, is there a code, compileable with MSVC2013 CE / MSVC2015 CE / gcc (linux) available? (hopefully configurable with cmake)

Thank you.

r_overbrightbits behavior GL1 vs GL2

In GL1, r_overbrightbits does not affect the brightness of fullbright objects (armor, parts of ammo pickups, quad damage, etc). In GL2, it does. r_overbrightbits is 1 by default, so this makes armor and everything twice as bright in GL2.

If r_overbrightbits will affect the brightness of this kind of object in GL2, there should at least be a 1 bit penalty to this kind of object so that it looks the same as GL1 on default settings.

It looks like armor, quad, and the fullbright part of health pickups get bitshifted twice, while health does not.

Dynamic lighting is broken

I noticed in ioquake3 (the latest git) that the dynamic lighting is broken. Can someone please figure out where the bug is in the renderer dlls (if there is any making this bug happen) & fix it?

Mouse doesn't work at all

Any tips how to debug?

X1C3:~/.local/share/xorg$ grep -i mouse Xorg.0.log | sed 's/^/    /'
[    12.777] (==) intel(0): Silken mouse enabled
[    12.913] (--) evdev: PS/2 Synaptics TouchPad: Found 3 mouse buttons
[    12.913] (II) evdev: PS/2 Synaptics TouchPad: Configuring as mouse
[    12.913] (II) XINPUT: Adding extended input device "PS/2 Synaptics TouchPad" (type: MOUSE, id 11)
[    12.913] (II) config/udev: Adding input device PS/2 Synaptics TouchPad (/dev/input/mouse0)

http://s.natalian.org/2015-02-18/q3.log

Running Archlinux on Broadwell with https://aur.archlinux.org/packages/io/ioquake3-git/PKGBUILD

Buffer overflow renderergl2/tr_bsp.c:2306

Address Sanitizer identified this issue.

Read from uninitialized memory in R_LoadSurfaces() line 2306. surface is a pointer cast over out->data when surfaceType == MST_PATCH.

See line 2279 for the FIXME in lieu of a Hunk_Alloc() or similar call.

Crash log:

=================================================================
==2310==ERROR: AddressSanitizer: global-buffer-overflow on address 0x000101ee174c at pc 0x000101a967d6 bp 0x7fff5e57b2d0 sp 0x7fff5e57b2c8
READ of size 4 at 0x000101ee174c thread T0
    #0 0x101a967d5 in R_LoadSurfaces tr_bsp.c:2306
    #1 0x101a8d7f8 in RE_LoadWorldMap tr_bsp.c:3298
    #2 0x101683529 in CL_CgameSystemCalls cl_cgame.c:546
    #3 0x101a4ebaa in DoSyscall vm_x86.c:436
    #4 0x125a5a051  (<unknown module>)
    #5 0x1098ba987  (<unknown module>)
    #6 0x10187dc5e in VM_Call vm.c:861
    #7 0x10168726a in CL_InitCGame cl_cgame.c:784
    #8 0x1016c45e3 in CL_DownloadsComplete cl_main.c:2067
    #9 0x1016c5a08 in CL_InitDownloads cl_main.c:2335
    #10 0x1016d637a in CL_ParseGamestate cl_parse.c:543
    #11 0x1016d78be in CL_ParseServerMessage cl_parse.c:905
    #12 0x1016ca7ef in CL_PacketEvent cl_main.c:2889
    #13 0x10177a4bb in Com_EventLoop common.c:2177
    #14 0x10177d64b in Com_Frame common.c:2987
    #15 0x10188e978 in main sys_main.c:689
    #16 0x10167e613 in start (tremulous_opengl2.x86_64+0x100001613)
    #17 0x2  (<unknown module>)

0x000101ee174c is located 8 bytes to the right of global variable 'skipData' defined in 'src/renderergl2/tr_bsp.c:832:23' (0x101ee1740) of size 4
SUMMARY: AddressSanitizer: global-buffer-overflow tr_bsp.c:2306 in R_LoadSurfaces
Shadow bytes around the buggy address:
  0x1000203dc290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1000203dc2a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1000203dc2b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x1000203----- Client Shutdown (Received signal 6) -----

Error correction codes for faster and more reliable network communications

This is an enhancement proposal.

Currently the ioq3 engine uses replication of UDP packets to ensure that the communication is reliable.

However, a more reliable, faster way and using less bandwidth than replication would be to use error correcting codes, with the only cost being a bit more CPU consumption on the server and on the client sides.

For example, this C++ library could be a good starting point (it's exactly about using error correcting codes for reliable UDP communications, but it's in CPP...): https://github.com/catid/shorthair

There are a lot of other C libraries implementing Reed-Solomon, so that reinventing the wheel should not be necessary here. But shorthair is a good example for the actual implementation for UDP packets management, even if another library is used in the end.

As stated by the shorthair project:

Advantages of using erasure codes in online games:

  • 50% faster delivery over UDP than over TCP
  • 50% less bandwidth used than naive redundancy
  • 50% better recovery rate than parity redundancy

Also, this library shows how to compute the ecc rate to achieve the target loss rate, so that a server configurable variable could be advantageously added for servers admins to setup the loss rate they are expecting. This rate would then be sent to the clients inside the connection string along with other variables.

I do not see ECC as a replacement for the current replication scheme of UDP packet, but it could be a complement (because anyway if an UDP packet was already received, it will be discarded). This would probably allow for smoother gameplay across long distances such as EU players on a US server.

lighting issue on a custom map

Hello,
I recently downloaded the map Grindill 2.0 (http://lvlworld.com/comments/id:1691) but when I play it using the ioquake3 engine the lighting is terrible (http://imgur.com/a/p0BQB). I don't have this problem when I play the map using the original quake3 engine. I'm using windows 10. People playing on linux say it's working fine for them. Also, I have a GTX970 graphics card, if that makes any difference.
I hope you'll be able to fix this issue because it really is a cool map
Thanks in advance!

David

Integer overflow in snd_mem.c

ResampleSfx() and ResampleSfxRaw() in snd_mem.c resample the input audio file to the audio driver's sampling rate. The multiplication by 256=2^8 and subsequent bitshift by 8 bits to the right of the buffer offset allow for an upscaling of input frequencies as low as 1/256 of the target sampling rate, but they reduce the resulting maximum number of samples by 8 bits. This allows only for 95 seconds of playtime at 44.1 khz or 190 seconds at 22 khz. After that, samplefrac overflows.

One "fix" would be to change 2^8 and 8 to smaller values, maybe 2^3=8 and 3, and add a warning message if the sampling rate is too small.

Issue with building on Debian Jessie powerpc

I dont know why doctor close the discussion about ... in any way i tested ioq3 on Debian Jessie .... with the same result of mate

D build/release-linux-ppc64/ioquake3.ppc64
/usr/bin/ld: impossibile trovare -lSDL2
collect2: error: ld returned 1 exit status
Makefile:2054: set di istruzioni per l'obiettivo "build/release-linux-ppc64/ioquake3.ppc64" non riuscito
make[2]: *** [build/release-linux-ppc64/ioquake3.ppc64] Errore 1
--- just for be sure

/src/ioq3# aptitude search libsdl2-dev
i libsdl2-dev

Non-portable use of va_args

The VM_Call function in vm.c currently uses variable arguments in a very awkward fashion in order to fake "default arguments" for function parameters: va_arg(ap, int) is called 12 times unconditionally, independent of how the function was actually called.

This has undefined behaviour and is not portable. It will typically read outside the stack frame and throw off memory analysers.

I'm not sure how to solve this in C89, but if you are willing to require C99, this could be solved with a compound literal:

#define VM_Call(VM, ...) VM_Call_Impl(VM, &(int[13]){__VA_ARGS__})

intptr_t VM_Call_Impl(vm_t *vm, int (*args)[13]) {
  int callnum = (*args)[0];  // etc.
}

What do you think of such a change?

OpenGL2: r_ext_framebuffer_multisample draws flares through mirrors.

When flares are enabled (r_flares 1), and r_ext_framebuffer_multisample is > 1 than flares are seen through mirrors.

How to reproduce:

  1. Start q3tourney6
  2. set r_flares 1, r_ext_framebuffer_multisample 2.
  3. Go to the BFG platform.
  4. Have a look at the mirror floor at this platform.
  5. You can see the flares from the main platform shining through the mirror floor.

Screenshot from q3tourney6:
shot0003

making auto-downloading safer

ioquake3 developers currently recommend that auto-downloading should always be disabled. For instance, in the advisory for CVE-2011-2764:

Quake3 was never really designed to be secure against malicious 3rd party content, and probably isn't even in latest revisions of ioquake3. So downloading of untrusted content is still discouraged.
...
workaround: Don't download and install untrusted addons. Set cl_allowdownload to 0

This is a shame, because auto-downloading is clearly something that people use - if they didn't, there would have been no point in making it better by integrating cURL support - and it's very convenient to be able to download map packs, models/skins and other non-executable content.

ioquake3 has historically treated it as a security vulnerability if there is a known exploit allowing an auto-downloadable mod to escape from the QVM sandbox and execute arbitrary native code (e.g. CVE-2011-3012). However, some Quake III-derived games use native-code for their mods and thus cannot limit mods' capabilities at all, e.g. Jedi Knight II, Jedi Academy and RTCW. Open-source versions of those games continue to support unpacking native-code DLLs from PK3 files and loading them, so that existing mods can continue to work, e.g. JACoders/OpenJK#646.

At the moment, a mod that has been auto-downloaded from a server to a client is indistinguishable from a manually-installed mod. I think this is the key thing preventing auto-downloading from being made safer, and I would like to improve on it. Would ioquake3 developers be interested in merging that change? Whether it gets integrated into ioquake3 master or not, it would be best if this happened in some fork of ioquake3 (GPL-2+), so that the relevant code can legally be imported into both GPL-2-only projects like OpenJK, and GPL-3-only projects like iortcw.

Here is a sketch of one design that I think would address this:

  • When auto-downloading mods, "mark" the auto-downloaded PK3 in some way. The easiest way would be a different file extension, perhaps .dlpk3; or for better compatibility with current ioquake3, a double extension like .dl.pk3 or .auto.pk3 might work.
  • When loading files that are believed to be safe - maps, textures, models - treat all PK3s as equivalent.
  • Are shaders and GLSL in the safe set? I don't know their capabilities.
  • When loading executable content - QVM bytecode, and native DLLs in derived games that do that - refuse to load from auto-downloaded mods, only from manually-installed mods. This could be controlled by a config option, or it could be mandatory; iortcw could potentially have an intermediate setting where QVM bytecode is allowed but native DLLs are not.

Or does anyone have better ideas for solving this?

Occasionally in-game sounds are not played

Preface: Since the 1.36 version of ioquake 3 from the homepage stopped working recently (since what feels like the last OS update to Mac OS 10.11.3 it always crashes at launch, just after switching to a black screen) I got the latest source here from github and compiled it. The good news is that it doesn't crash, however there is an issue with audio:

When playing normally, occasionally single in-game sounds are not played. Sometimes picking up an object doesn't play the usual sound, or shooting or hitting, or jumping etc. even though most of the sounds are played most of the time. Also the voice saying "impressive" etc. while in-game is never played at all (though that's ok for me) but it does come at the end of a single-player game.

Thanks for looking into this, and let me know if there is any way I can help.

q3config.cfg loaded twice with Com_GameRestart

When Com_GameRestart is called, the q3config.cfg is loaded twice. I'm not sure if this is the source of seeing the spam of latched cvars needing to be changed on restart during this case or not but it gets called in FS_Restart via Com_GameRestart (only q3config.cfg) and then later in Com_GameRestart the Com_ExecuteCfg is called.

Screen brightness setting not honored (OS X 10.11)

I have the screen brightness slider all the way up and if I click it with the mouse, the brightness is correctly applied. However, if I close the game and reopen it, the slider is at the same position, but brightness dials down significantly. It only fixes itself if I click the slider knob again.

 Model Name:    MacBook Pro
 Model Identifier:  MacBookPro11,5
 Processor Name:    Intel Core i7
 Processor Speed:   2.5 GHz
 Number of Processors:  1
 Total Number of Cores: 4
 L2 Cache (per Core):   256 KB
 L3 Cache:  6 MB
 Memory:    16 GB
 Boot ROM Version:  MBP114.0172.B07
 SMC Version (system):  2.30f2

 Chipset Model: AMD Radeon R9 M370X
 Type:  GPU
 Bus:   PCIe
 PCIe Lane Width:   x8
 VRAM (Total):  2048 MB
 Vendor:    ATI (0x1002)
 Device ID: 0x6821
 Revision ID:   0x0083
 ROM Revision:  113-C5670E-777
 gMux Version:  4.0.20 [3.2.8]
 EFI Driver Version:    01.00.777

ioquake3 crashes trying to download a pk3 file

Version from today, while trying to download, ioquake3 crashes. Stacktrace:

87074 times this line:
#87075 0x0000000000467367 in qcurl_easy_setopt_warn (curl=, option=) at code/client/cl_curl.c:235
#87076 0x0000000000467367 in qcurl_easy_setopt_warn (curl=, option=) at code/client/cl_curl.c:235
#87077 0x0000000000467367 in qcurl_easy_setopt_warn (curl=, option=option@entry=CURLOPT_URL) at code/client/cl_curl.c:235
#87078 0x00000000004674af in CL_cURL_BeginDownload (localName=localName@entry=0xec29d0 <clc+148912> "excessiveplus/z-xp-2_3.pk3",

remoteURL=0xd778a0 <string+32000> "http://xyz.com/somedir/excessiveplus/z-xp-2_3.pk3") at code/client/cl_curl.c:286

#87079 0x000000000041f577 in CL_NextDownload () at code/client/cl_main.c:2216
#87080 0x000000000041f6b2 in CL_InitDownloads () at code/client/cl_main.c:2286
#87081 0x0000000000424b31 in CL_ParseGamestate (msg=msg@entry=0x7ffd8e4308b0) at code/client/cl_parse.c:548
#87082 0x0000000000425018 in CL_ParseServerMessage (msg=msg@entry=0x7ffd8e4308b0) at code/client/cl_parse.c:919

---Type to continue, or q to quit---
#87083 0x0000000000422b2f in CL_PacketEvent (from=..., msg=msg@entry=0x7ffd8e4308b0) at code/client/cl_main.c:2809
#87084 0x0000000000456a4c in NET_Event (fdr=fdr@entry=0x7ffd8e4349d0) at code/qcommon/net_ip.c:1641
#87085 0x0000000000456e33 in NET_Sleep (msec=) at code/qcommon/net_ip.c:1698
#87086 0x000000000043c273 in Com_Frame () at code/qcommon/common.c:3127
#87087 0x0000000000405012 in main (argc=, argv=) at code/sys/sys_main.c:686

Tag a release?

Could ioq3 tag a source release so packages can be built? I don't see a release of sources on the ioquake3 website... just binaries.

Code Signing on Windows and macOS

Modern operating systems that are protective of their user's data present error messages when our binaries are executed because we don't sign our code. This sucks for our users because they experience extreme friction that prevents them from playing Quake 3 and games based on Quake 3, and it will only get worse for applications that don't sign over time as new operating systems make it more difficult to workaround this security measure and run unsigned code. We should probably fix it on our end, though I would guess you can't do that entirely in public on github because you'd be including our keys for whatever signing authority, perhaps we could at least include some pieces of scaffolding for a future release to sign executables?

In some magical ideal world our test builds from Jenkins would even be code signed.

Apple has documentation for macOS here:
https://developer.apple.com/library/prerelease/content/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html

Which has very easy to read language to explain the situation:

Code signing is a security technology, used in OS X, that allows you to certify that an app was created by you. Once an app is signed, the system can detect any change to the app—whether the change is introduced accidentally or by malicious code.

I'm not immediately finding a good starting point for Windows' code signing, they probably have some marketing name I'm not immediately aware of, will look again when I get a chance.

Unicode or Multi-Byte Character set for MSVC12 (VS2013) solution

I'm creating a Visual Studio solution (msvc12), but usage of non-UNICODE options has been deprecated - gives error
Visual Studio error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for more information. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets 376 5 quake3

Available solutions are: (from, e.g. http://stackoverflow.com/questions/21360411/visual-studio-unable-to-recognise-my-mfc-library-for-my-webcam-laser-rangefinder)

  1. change all projects to use Unicode
  2. change all projects to use Multi-Byte Character set
  3. install MFC MBCS DLL Add-on (https://msdn.microsoft.com/library/dn251007.aspx)

I would tend to go with 1), but presently the "q3_ui" and "ui" projects are set to use MBCS.

Issue with building on ubuntu-mate 16.04 powerpc

i have libsdl2-dev 2.04 and libsdl2 2.04 on my system but dont build
LD build/release-linux-ppc64/ioquake3.ppc64
/usr/bin/ld: skipping incompatible /usr/local/lib/libSDL2.so when searching for -lSDL2
/usr/bin/ld: skipping incompatible /usr/local/lib/libSDL2.a when searching for -lSDL2
/usr/bin/ld: skipping incompatible //usr/lib/powerpc-linux-gnu/libSDL2.so when searching for -lSDL2
/usr/bin/ld: skipping incompatible //usr/lib/powerpc-linux-gnu/libSDL2.a when searching for -lSDL2
/usr/bin/ld: skipping incompatible //usr/local/lib/libSDL2.so when searching for -lSDL2
/usr/bin/ld: skipping incompatible //usr/local/lib/libSDL2.a when searching for -lSDL2
/usr/bin/ld: cannot find -lSDL2
collect2: error: ld returned 1 exit status
Makefile:2054: recipe for target 'build/release-linux-ppc64/ioquake3.ppc64' failed
make[2]: *** [build/release-linux-ppc64/ioquake3.ppc64] Error 1
make[2]: Leaving directory '/home/amigaone/src/ioq3'

OpenGL2: DM11 and DM12 fail to load (HUNK_ALLOC failed)

DM11 and DM12 both fail to load when playing through the single player campaign mode using the OpenGL2 renderer (works fine with OpenGL1.) The error for DM11 is "HUNK_ALLOC FAILED ON 249696" and for DM12 "HUNK_ALLOC FAILED ON 3594624."

DM12 will load fine if you use skirmish mode regardless of number of bots (only fails from campaign mode) and DM11 will load from skirmish mode IF you use 3 of less bots (any more and it fails and the error number varies depending on how many bots.)

I am using the pak0.pk3 from my retail Quake 3 CD. There may be other maps that fail as well. I haven't tested all of them.

EDIT: I'm using the latest git build, compiled today (g1902b6e.) I was originally using a build from April (04-12-2015, g10c5f0b) and it was broken there too. Also I'm using Arch Linux.

Player Positions

I'm trying to find out how I can log player positions, is there any way of doing this? Any help would be amazing!

OpenGL2: Specular effect doesn't draw over brushes without transition.

The specular effect does take edges of multiple brushes into account. On the edge of some brushes the specular effect stops, and on the adjacent brush the specular effect is seen from another view angle.
This issue is better to see with a higher r_baseSpecular value (> 0.3).

Possibly not using r_baseSpecular ?

How to reproduce:

  1. Start q3tourney6
  2. Go into Spectator mode.
  3. Fly under one of the main platforms.
  4. Have a look at the bottom of the floor brushes.
  5. There are artefacts, depending on view angle.

I attached a screenshot from q3tourney6:
shot0002

JSON Build Failure in Linux

For whatever reason, I get the error "code/renderergl2/tr_bsp.c:27:29: fatal error: ..\qcommon\json.h: No such file or directory
compilation terminated." when I attempt to compile ioquake3.

Either there is an obvious solution that I am overlooking, or something needs to be fixed.

build exit with error because cant be negative define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1

i face it on Quad G5 and On X5000 too ..
this is in /libcurl-7.35.0/curlrules.h

dont build exit with error because this cant be negative

define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1

define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1

i switched in:

define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : 1

define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : 1

and build was continue

Map loading: some maps produce MAX_PATCH_PLANES error.

Not sure if this is relevant or of some interest:
Some maps won't load in ioquake3 anymore, whereas they will load without problems in vanilla Q3.
Motivated by another ones post (at ioquake3 forums) I investigated a bunch of maps that will not load and at least will give an error message.

Here are two maps I found: http://ws.q3df.org/map/a-spec-q3dm2/
and also: http://ws.q3df.org/map/wangctf1/
NOTES:

  1. Both renderers will fail to load the maps (assuming this is related to rendering).
  2. At least on my system the maps won't load: Win 8, Nvidia GTX 770, enough RAM for Q3 :)
  3. iirc the maps were loading in ioquake3 as well, in the past.

NOTE: The maps are custom Q3 maps, NOT QuakeLive maps!

ioquake3 is lacking releases

Hi,

Fedora ioquake3 package maintainer here. I think that it is great to see that ioquake3 is still seeing active development. But as a Linux distro packager I would really like to see you do releases, or at a minimum do git tags at points in time when you consider the code to be fully stable / tested. E.g. when you build new binaries for your download page.

For example it would be good to know from which git commit the official 1.36.7.1 Linux binaries are builds. Using git tags for this will also make your own live easier when you get bug-reports for the official binaries.

Thanks & Regards,

Hans

cmakelist.txt missing

Trying to build on Windows with Eclipse cdt. Cmake is giving me an error on cmakelist.txt missing. Is there one lying around or do I have to write my own (learn how to).

Override default master for the in-game GUI and fix server DNS caching issue

master server
The default master server of master.quake3arena.com appears to be down permanently. Players/clients are not able to use the default in-game server browser. We need to override this configuration in all cases to point to master.ioquake3.org as well as solving the caching issue in #161

Servers should still report to master.quake3arena.com in case it comes back online.

SO_REUSEADDR option for socket

I use systemd and systemd.socket activation for ioq3ded server. I found the problem that server cannot bind to default port 27960 on start because systemd already use it for listening. The only workaround I found is to set SO_REUSEADDR for socket in net_ip.c and rebuild server from sources. Can this option be added by default?

I can provide pull request with net_ip.c file. Not sure if is it better to have separate variable for that.

Annoying aural bugs (at least for me they are)

impressive_a.wav & excellent_a.wav should be used if anyone except you in any gametype earned those awards, & hit_teammate.wav should also be played if you hit any of your teammates in TDM/CTF/etc. None of these sounds are used currently, but there IS code for the hit_teammate.wav sound to play however (which is kinda strange). I reported this very bug @ zturtleman/spearmint#273. EDIT: It turns out they're used for awards after an SP level.

"pak0.pk3" is missing

➜  ioq3 git:(master) ./make-macosx.sh x86_64
➜  ioq3 git:(master) ./build/release-darwin-x86_64/ioquake3.app/Contents/MacOS/ioquake3
ioq3 1.36_GIT_f4aa39a-2015-08-25 macosx-x86_64 Aug 28 2015
Have SSE support
----- FS_Startup -----
Current search path:
/Users/Nicholas/Library/Application Support/Quake3/baseq3
./build/release-darwin-x86_64/ioquake3.app/Contents/MacOS/baseq3
./build/release-darwin-x86_64/baseq3

----------------------
0 files in pk3 files
"pak0.pk3" is missing. Please copy it from your legitimate Q3 CDROM. Point Release files are missing. Please re-install the 1.32 point release. Also check that your ioq3 executable is in the correct place and that every file in the "baseq3" directory is present and readable

Where am I supposed to put the pak0.pk3 file? Maybe this error message could be updated?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.