Code Monkey home page Code Monkey logo

robertbeckebans / rbdoom-3-bfg Goto Github PK

View Code? Open in Web Editor NEW

This project forked from id-software/doom-3-bfg

1.4K 85.0 250.0 76.42 MB

Doom 3 BFG Edition source port with updated DX12 / Vulkan renderer and modern game engine features

Home Page: https://www.moddb.com/mods/rbdoom-3-bfg

License: GNU General Public License v3.0

Lua 0.01% C 3.48% C++ 86.12% CMake 0.18% Shell 0.01% HTML 8.91% Makefile 0.02% Batchfile 0.01% Python 0.15% Roff 0.01% HLSL 1.09% Perl 0.01% GLSL 0.01%
doom3 pbr 64-bit modding gaming idtech4 portable rbdoom3bfg trenchbroom

rbdoom-3-bfg's Introduction

    ____   ____   ____                           _____  ____   ______ ______
   / __ \ / __ ) / __ \ ____   ____   ____ ___  |__  / / __ ) / ____// ____/
  / /_/ // __  |/ / / // __ \ / __ \ / __ `__ \  /_ < / __  |/ /_   / / __  
 / _, _// /_/ // /_/ // /_/ // /_/ // / / / / /___/ // /_/ // __/  / /_/ /  
/_/ |_|/_____//_____/ \____/ \____//_/ /_/ /_//____//_____//_/     \____/   
_______________________________________________________________________

RBDOOM-3-BFG Readme - https://github.com/RobertBeckebans/RBDOOM-3-BFG

Download it from the RBDOOM-3-BFG Mod DB Page

RBDOOM-3-BFG

For discussions join the id Tech 4 Discord: https://discord.gg/Q3E9rUFnnP , #rbdoom3bfg

Table of Contents

This file contains the following sections:

  1. About the Port
  2. ".plan"
  3. May or may not ".plan"
  4. Renderer Features Explained
  5. TrenchBroom Mapping Support
  6. General Notes
  7. License
  8. Getting the Source Code
  9. Compiling on Windows
  10. Compiling on Linux
  11. Compiling on macOS
  12. Installation, Getting the Game Data, Running the Game
  13. New Console Variables
  14. Known Issues
  15. Bug Reports
  16. FAQ

About the Port

RBDOOM-3-BFG is a modernization effort of DOOM-3-BFG.

RBDOOM-3-BFG is based on DOOM-3-BFG and the goal of this port is to bring DOOM-3-BFG up to latest technology in 2023 making it closer to Doom 2016 while still remaining a DOOM 3 port regarding the gameplay.

I started this project in 2012 and focused on making this code being future proof so other cool projects can build interesting things on top of it without the need to fix a lot of stuff first. Over 40 people all over the world contributed cool patches. Some results are:

Gaming / Graphics Related

  • DX12 / Vulkan support through NVRHI (NVIDIA Rendering Hardware Interface) (thanks to Stephen Pridham for major porting effort)
  • Physically Based Rendering using GGX Cook-Torrence as in other modern engines (UE4, Unity) and 3D authoring tools like Blender 3.x or Adobe Substance
  • Baked Global Illumination using Irradiance Volumes and Image Based Lighting that fix the pitch black areas
  • Soft shadows using a fat shadow mapping atlas:
    • All 3 light types (point, spot, parallel/sun) are supported which means parallel lights (sun) use scene independent cascaded shadow mapping.
  • True internal 64 bit HDR lighting with filmic ACES tone mapping and gamma-correct rendering in linear RGB space
  • Temporal Antialiasing (TAA) as a cheap alternative for MSAA and that works well with HDR and also improves PBR lighting
  • Filmic post process effects like Chromatic Aberration and Dithering
  • Screen Space Ambient Occlusion used to only dim down the Global Illumination contribution like in the Frostbite engine
  • Bink video playback through libbinkdec (thanks to Daniel Gibson) or FFmpeg (thanks to Carl Kenner)
  • Cinematic sequences can be skipped (thanks to Biel Bestué de Luna)
  • Netcode fixes to allow multiplayer sessions to friends with +connect (manual port forwarding required)

Programming and Code Quality

  • Flexible build system using CMake allowing to add optional features like FFmpeg for videos or OpenAL for sound
  • Linux support for both GCC and Clang with a proper SDL 2 OS layer including gamepad support
  • Win64 support and Visual Studio support up to VS 2019-2022
  • macOS support (updated in 2023 thanks to Stephen Saunders)
  • OpenAL Soft sound backend primarily developed for Linux but works on Windows as well
  • Sourcecode cleanup using the Artistic Style C++ beautifier to ensure the Git diffs and logs are clean
  • Fixed tons of warnings using the Clang compiler
  • Fast compile times using precompiled header support which allows to compile the entire engine and builtin tools in less than 30 seconds on a Ryzen 9
  • Although not really supported but runs on exotic hardware like MIPS64, PPC64, ARM64 and E2K architectures
  • Updated idRenderLog with new markers to support RenderDoc and Nvidia's Nsight

Modding Support

RBDOOM-3-BFG allows mod editing and has many tiny fixes so custom content can be put into mod directories and the engine accepts it like vanilla Doom 3.

  • TrenchBroom Mapping Support - see more information in the TrenchBroom section
  • New PBR related material keywords like basecolormap, normalmap, rmaomap
  • invertGreen( normalmap.png ) material keyword to allow flipping the Y-Axis for tangent space normal maps
  • glTF2 .glb model support for static and skinned models (thanks to Harrie van Ginneken)
  • Changed dmap to support compiling maps straight from glTF2 .glb models instead of .map files using a new polygon based workflow
  • Wavefront OBJ model support to make it easier getting static models from Blender/Maya/3D Studio Max into TrenchBroom
  • Added back dmap and aas compilers (mapping tools, thanks to Pat Raynor) and improved them to work with TrenchBroom and Blender
  • Added in-engine Flash debugging tools and new console variables
  • Added support for Mikkelsen tangent space standard for new assets (thanks to Stephen Pridham)
  • Bumped the static vertex cache limit of 31 MB to roughly ~ 128 MB to help with some custom models and maps by the Doom 3 community
  • com_showFPS bigger than 1 uses ImGui to show more detailed renderer stats like the original console prints with r_speeds
  • Native C++ AI & Weapons framework instead of Doomscript in the IcedHellfire mod by Justin Marshall (mods/icedhellfire branch)

If you want to start mod from a directory, you should first specify your mod directory adding the following command to the launcher:

"+set fs_game modDirectoryName"

so it would end up looking like: RBDoom3BFG +set fs_game modDirectoryName

IMPORTANT: RBDOOM-3-BFG does not support old Doom 3 modifications that include sourcecode modifications in binary form (.dll) You can fork RBDOOM-3-BFG and create a new renamed binary that includes all required C++ game code modifications.


".plan"

If you want to see what is planned or in progress in a Trello/Kanban style manner look here: RBDOOM-3-BFG projects

Short term goals:

  • Node based Imgui particle editor
  • Flash support through Adobe Animate or Blender
  • Raytracing for accelerating the probe baking and optionally adding realtime global illumination

May or may not ".plan"

  • Replace expensive multipass forward shading with a faster forward+ solution
  • Volumetric Lighting
  • ReSTIR or some other realtime path tracing
  • Optional alternative collision detection and physics with PhysX 5 or Jolt

Renderer Features Explained

Physically Based Rendering

Implementing Physically Based Rendering (PBR) in Doom 3 is a challenge and comes with a few compromises because the Doom 3 content was designed to work with the hardware constraints in 2004 and that even meant to run on a Geforce 3.

The light rigs aren't made for PBR but it is possible to achieve good PBR lighting even with the old content by tweaking the light formulars with a few good magic constants. However I also want to support the modding scene to allow them to create brand new PBR materials made with Substance Designer/Painter or other modern tools so multiple rendering paths have been implemented.

PBR allows artists to create textures that are based on real world measured color values and they look more or less the same in any renderer that follows the PBR guidelines and formulars.

RBDOOM-3-BFG only supports the standard PBR Roughness/Metallic workflow.

Adding PBR is a requirement to make the new content look the same in RBDOOM-3-BFG as in Blender 3.x with Cycles or Eevee and Substance Designer. PBR became the standard material authoring since 2014. With RBDOOM-3-BFG modders can work with modern tools and expect that their content looks as expected.

The PBR implementation is restricted to standard PBR using the Roughness/Metallic workflow for now. Specialized rendering paths for skin, clothes and vegetation will be in future releases.

PBR Texture format

In Doom 3 a classic simple materials looks like this:

textures/base_wall/snpanel2rust
{
  qer_editorimage		textures/base_wall/snpanel2rust.tga
	
  bumpmap           textures/base_wall/snpanel2_local.tga
  diffusemap        textures/base_wall/snpanel2rust_d.tga
  specularmap       textures/base_wall/snpanel2rust_s.tga
}

It's usually rendered with Blinn-Phong specular with a fixed specular exponent. Specularmaps are more or less Gloss maps.

In RBDOOM-3-BFG it uses the PBR GGX Cook-Torrence formular and you can vary the roughness along the material like in other modern engines and you usually define a texture with the _rmao suffix.

RMAO Image Channels Description
Red Roughness
Green Metalness
Blue Ambient Occlusion

Example material:

models/mapobjects/materialorb/orb
{
  qer_editorimage   models/mapobjects/pbr/materialorb/substance/metal04_basecolor.png
  
  basecolormap      models/mapobjects/pbr/materialorb/substance/metal04_basecolor.png
  normalmap         models/mapobjects/pbr/materialorb/substance/metal04_normal.png
  rmaomap           models/mapobjects/pbr/materialorb/substance/metal04_rmao.png
}

The engine will also look for _rmao.[png/tga] overrides for old materials and if it finds those it will render them using a better PBR path. Old school specularmaps also go through a GGX pipeline but the roughness is estimated from the glossmap.

The Ambient Occlusion will be mixed with the Screen Space Ambient Occlusion and will only affect indirect lighting contributed by the environment probes.

Baked Global Illumination using Irradiance Volumes and Image Based Lighting

To achieve the typical PBR look from an artistic point of view it also means to that it is necessary to add indirect lighting. Doom 3 and even Doom 3 BFG had no indirect lighting.

Doom 3 BFG is a big game. Doom 3, Resurrection of Evil and Lost Missions sum up to 47 big single player levels with an average of ~60 - 110 BSP portal areas or let's call them rooms / floors. Each room can have up to 50 shadow casting lights and most of them are point lights. I needed a good automatic solution that fixes the pitch black areas without destroying the original look and feel of the game. I also needed to add environment probes for each room so PBR materials can actually reflect the environment.

So RBDOOM-3-BFG comes with 2 systems to achieve this and both are automatic approaches so everything can be achieved in a reasonable amount of time. The first system are environment probes which are placed into the center of the rooms. They can also be manually tweaked by adding env_probe entities in the maps. They use L4 spherical harmonics for diffuse reflections and GGX convolved mip maps for specular reflections. The second system refines this by using a light grid for each room which provides a sort of a localized/improved version of the surrounding light for each corner of the room.

Irradiance Volumes aka Light Grids

RBDOOM-3-BFG 1.3.0 brings back the Quake 3 light grid but this time the grid points feature spherical harmonics encoded as octahedrons and it can be evaluated per pixel. This means it can be used on any geometry and serves as an irradiance volume. Unlike Quake 3 this isn't radiosity which is limited to diffuse only reflections. The diffuse reflectivity is built using all kinds of incoming light: diffuse, specular and emissive (sky, light emitting GUIs, VFX).

Lightgrids can be baked after loading the map and by typing:

bakeLightGrids [<switches>...]
<Switches>
 limit[num] : max probes per BSP area (default 16384)
 bounce[num] : number of bounces or number of light reuse (default 1)
 grid( xdim ydim zdim ) : light grid size steps into each direction (default 64 64 128)

This will generate a .lightgrid file next to your .map file and it will also store a light grid atlas for each BSP area under env/maps/<path/to/your/map/>

Limit is 16384 by default and means the maximum number of light grid points in a single light grid. Quake 3 had one light grid that streched over the entire map and distributed lighting every 64 x 64 x 128 units by default. If the maps were too big then q3map2 made the default grid size broader like 80 x 80 x 144, 96 x 96 x 160 and so on until the maximum number of light grid points was reached.

The Quake 3 approach wouldn't work with Doom 3 because the maps are too big and it would result in up to 800k probes for some maps or the grid density would very coarse.

RBDOOM-3-BFG uses the bounding size of the BSP portal areas and puts smaller light grids into those BSP areas.

This way we can maintain a good grid density and avoid wasting storage because of light grid points that are in empty space.

But what is an Irradiance Volume or Light Grid exactly?

It tells each model or lit pixel how the indirect diffuse lighting is coming from any direction. The Probulator page by Yuri O'Donnell has some good examples:

Left: The captured view using a panorama layout. Right: The Diffuse lighting using Level 4 Spherical Harmonics aka Irradiance.

Now think of this for each of the grid points in RBDOOM-3-BFG. If a model is placed between those probes the lighting will be interpolated by the nearest 8 grid points similar like in Quake 3.

Quake 3 only stored the dominant light direction, the average light color of that direction and an ambient color term for each grid point. In RBDOOM-3-BFG you basically can have the diffuse lighting information for any world space direction instead. This is a way more advanced technique.

Image Based Lighting and Environment Probes

Environment probes supplement the light grids. While light grids provide diffuse lighting information the signal isn't good enough to provide plausible specular light reflections. This is where environment probes are needed.

If a level designer doesn't put any env_probe entities into a map then they are automatically distributed through the map using the BSP area bounds and placed in the center of them.

Environment probes can be computed after loading the map and by typing:

bakeEnvironmentProbes

This will generate EXR files in env/maps/<path/to/your/map/>.

The environment probes use an octahedron encoding and the specular mipmaps are convolved using the Split Sum Approximation by Brian Karris [Epic 2013]. Convolving the environment probes is done on the CPU using the id Tech 5 multi threading code so it will consume all your available cores.

For artists this basically means if you increase the roughness in your material then you increase the mip map level of the environment probe it samples light from and it gets blurier.

Fallback for Missing Data

If you haven't downloaded the additional baked light data from the RBDOOM-3-BFG ModDB Page and just run RBDOOM-3-BFG.exe with the required DLLs (or you built it yourself) it will use an internal fallback. RBDOOM-3-BFG.exe has one prebaked environment probe that is compiled into the executable.

It's the light data from the Mars City 1 lobby in the screenshot above. Using this data for the entire game is inacurrate but a better compromise than using a fixed global light direction and some sort of Rim lighting hack like in version 1.2.0. The default irradiance / radiance data gives the entire game a warmer look and it fits for being on Mars all the time.

Some Examples of Indirect Lighting

Single spot light render with direct lighting only

Single spot light render causing indirect light bounce using the new irradiance light grid in RBDOOM-3-BFG combined with SSAO

Raytraced reference in Blender 2.83 with Cycles raytracing

Left: No global illumination. Ambient is pitch black like in original Doom 3. Right: Extra ambient pass for global illumination with r_forceAmbient 0.5.

Filmic Post Processing

If you enable it with r_useFilmicPostProcessing 1 then you play DOOM 3 BFG the optics of a Zack Snyder movie.

It adds chromatic abberation and filmic dithering using Blue Noise. The effect is heavy and is usually aimed in Film production to mix real camera footage with CG generated content.

Dithering demonstration: left side is quantized to 3 bits for each color channel. Right side is also only 3 bits but dithered with chromatic Blue Noise. The interesting fact about the dithering here is shown in the upper debug bands. The first top band is the original signal. The second shows just 8 blocks and if you dither the those blocks with Blue Noise then it is close to the original signal which is surprising.

TrenchBroom Mapping Support

The goal of the TrenchBroom support is to make mapping for RBDOOM-3-BFG as easy as for Quake 1.

Mapping for Doom 3 BFG using TrenchBroom requires an extended unofficial build that is bundled with the official RBDOOM-3-BFG 7z package. You can find the customized TrenchBroomBFG version under tools/trenchbroom/.

More information about this custom TrenchBroomBFG and the source code is here:

https://github.com/RobertBeckebans/TrenchBroomBFG

Doom 3 BFG also requires some extensions in order to work with TrenchBroom. The Quake 1/2/3 communities already adopted the Valve 220 .map format in the BSP compilers and I did the same with dmap in RBDOOM-3-BFG.

TrenchBroomBFG speficic Changes

  • idMapFile and dmap were changed to support the Valve 220 .map format to aid mapping with TrenchBroom
  • Added exportFGD [nomodels] console command which exports all def/*.def entityDef declarations to base/_tb/fgd/ as Forge Game Data files. TrenchBroom has native support to read those files https://developer.valvesoftware.com/wiki/FGD. If the nomodels argument is not given then it will also export all needed models by entity declarations to base/_tb/ as Wavefront OBJ files.
  • Support angles keyword again for TrenchBroom like in Quake 3
  • Added cmd convertMapToValve220 <map>
  • Added cmd exportImagesToTrenchBroom which decompresses and saves all .bimage images to _tb/*.png files
  • Added cmd exportModelsToTrenchBroom which saves all .base|.blwo|.bmd5mesh models to _tb/*.obj files

General Notes

A short summary of the file layout:

Directory Description
RBDOOM-3-BFG/base/ Doom 3 BFG media directory ( models, textures, sounds, maps, etc. )
RBDOOM-3-BFG/neo/ RBDOOM-3-BFG source code ( renderer, game code for multiple games, OS layer, etc. )
RBDOOM-3-BFG/build/ Build folder for CMake
RBDOOM-3-BFG/tools/runtimedeps Visual Studio C++ Redistributables if you have problems to start the engine or the tools
RBDOOM-3-BFG/tools/trenchbroom TrenchBroomBFG level editor customized for DOOM 3 and RBDOOM-3-BFG
RBDOOM-3-BFG/tools/darkradiant DarkRadiant level editor with an additional config for RBDOOM-3-BFG
RBDOOM-3-BFG/tools/bfgpakexlorer BFG Resource File Manager by George Kalampokis aka Mr.GK
RBDOOM-3-BFG/tools/optick-profiler Optick is a super-lightweight C++ profiler for Games

The GPL release does not contain any game data, the game data is still covered by the original EULA and must be obeyed as usual.

You must patch the game to the latest version.

You can purchase Doom 3 BFG Edition from GOG (DRM Free): https://www.gog.com/game/doom_3_bfg_edition

Or the game can be purchased from Steam (with DRM): http://store.steampowered.com/app/208200/

Steam

The Doom 3 BFG Edition GPL Source Code release does not include functionality for integrating with Steam. This includes roaming profiles, achievements, leaderboards, matchmaking, the overlay, or any other Steam features.

Bink Video playback

The RBDOOM-3-BFG Edition GPL Source Code release includes functionality for rendering Bink Videos through FFmpeg or libbinkdec.


License

See LICENSE.md for the GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007

ADDITIONAL TERMS: The Doom 3 BFG Edition GPL Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU GPL which accompanied the Doom 3 BFG Edition GPL Source Code. If not, please request a copy in writing from id Software at id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.

See LICENSE_EXCEPTIONS.md for all parts of the code that are not covered by the GPL.


Getting the Source Code

This project's GitHub.net Git repository can be checked out through Git with the following instruction set:

> git clone --recursive https://github.com/RobertBeckebans/RBDOOM-3-BFG.git

Existing repositories can be updated manually:

> git submodule update --init --recursive

Compiling on Windows

  1. Download and install the Visual Studio 2022 Community Edition.

  2. Download and install the latest CMake and make sure cmake.exe is added to your global or user PATH.

  3. Download and install the latest Vulkan SDK from LunarG: https://www.lunarg.com/vulkan-sdk/ You can skip this step if you compile with DX12 only by adding -DUSE_VULKAN=OFF to the CMake options.

  4. Generate the VS2022 projects using CMake by doubleclicking a matching configuration .bat file in the neo/ folder. Recommended in this case is cmake-vs2022-win64-no-ffmpeg.bat

  5. Use the VS2022 solution to compile what you need: RBDOOM-3-BFG/build/RBDoom3BFG.sln

Optional if you want to use FFmpeg

  1. Download ffmpeg-4.2.2-win64-shared.zip from https://github.com/advancedfx/ffmpeg.zeranoe.com-builds-mirror/releases

  2. Extract the FFmpeg DLLs to your current build directory under RBDOOM-3-BFG/build/


Compiling on Linux

  1. Go to https://github.com/microsoft/DirectXShaderCompiler and download the DXC binaries for Linux and put them into your local PATH. E.g. Unpack dxc-artifacts.tar.gz to your home directory and add this to your ~/.profile

     > # DXC compiler
     > PATH="~/dxc-artifacts/bin:$PATH"
    

    As an alternative to modifying your PATH, you can add -DDXC_CUSTOM_PATH=<path-to-dxc-binary> to the CMake options.

  2. You need the following dependencies in order to compile RBDoom3BFG with all features:

    On Debian or Ubuntu:

     > apt-get install cmake libsdl2-dev libopenal-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libvulkan-dev
    

    On Fedora

     > yum install cmake SDL-devel openal-devel ffmpeg-devel
    

    On ArchLinux

     > sudo pacman -S sdl2 cmake openal ffmpeg
    

    On openSUSE

     > sudo zypper install cmake libSDL2-devel openal-soft-devel
    

    You don't need FFmpeg to be installed. You can turn it off by adding -DFFMPEG=OFF and -DBINKDEC=ON to the CMake options. It is enabled by default because the bundled libbinkdec is slow during development if compiled for Debug mode.

  3. Generate the Makefiles using CMake:

     > cd neo/
     > ./cmake-linux-release.sh
    
  4. Compile RBDOOM-3-BFG targets with

     > cd ../build
     > make
    

Compiling on macOS

  1. Download and install Homebrew (https://brew.sh) for single architecture builds or MacPorts (https://www.macports.org/install.php) for universal architecture builds on macOS Big Sur or later.

  2. You need the following dependencies in order to compile RBDoom3BFG with all features:

    > brew install cmake sdl2 openal-soft ffmpeg (for single arch libraries only)
    or
    > sudo port install cmake libsdl2 +universal openal-soft +universal (for universal arch libraries)
    

    You don't need FFmpeg to be installed. You can turn it off by adding -DFFMPEG=OFF and -DBINKDEC=ON to the CMake options. For debug builds FFmpeg is enabled by default because the bundled libbinkdec is slow during development if compiled for Debug mode. For release, retail and universal builds FFmpeg is disabled and libbinkdec is enabled by default.

    The Vulkan SDK 1.3.231.1 or later must be installed and can be obtained from https://vulkan.lunarg.com/sdk/home#mac

  3. Generate the Makefiles using CMake:

    For command line builds:

     > cd neo/
     > ./cmake-macos-release.sh
    

    For Xcode builds:

     > cd neo/
     > ./cmake-xcode-release.sh	
     or
     > ./cmake-xcode-universal.sh (universal build on macOS Big Sur / Xcode 12.2 or later)
    

    Xcode release and universal builds now automatically package the executable into a macOS app bundle, defining an Info.plist file and copying the base directory and custom icon into the application bundle's Contents/Resources folder. This is controlled by adding -DMACOSX_BUNDLE=ON to the CMake options.

    For single architecture builds (debug, release, retail) the default openal-soft paths are set for Homebrew, while for universal builds the default paths are set for MacPorts. The single architecture build scripts are now portable and automatically detect Homebrew's openal-soft path prefix for x86 and Apple Silicon. The universal build script remains portable since MacPorts uses the same openal-soft installation path on x86 and Apple Silicon.

  4. Compile RBDOOM-3-BFG targets:

    For command line builds:

     > cd ../build
     > make
    

    For Xcode builds double click on RBDOOM-3-BFG/xcode-<buildtype>/RBDoom3BFG.xcodeproj and start the build. The generated Xcode project file is pre-configured with the correct targets and build settings.


Installation, Getting the Game Data, Running the Game

For 99% of all users:

  1. Download the newest version from the RBDOOM-3-BFG Mod DB Page

RBDOOM-3-BFG

  1. There are usually 2 kinds of RBDOOM-3-BFG packages. The Full and the Lite version. With the Full version you have the Win64 binaries, the baked environment probes and lightgrid data for all BFG single player maps like RBDOOM-3-BFG-1.3.0.42-full-win64-20211030-git-b4e0366.7z (6.18 GB download). The Lite version has the lite in the filename like RBDOOM-3-BFG-1.3.0.42-lite-win64-20211030-git-b4e0366.7z. Those packages don't ship with the precomputed light data but have everything else needed to run the mod and the tools like the custom TrenchBroom build.

  2. Simply extract both packages over your C:\Program Files (x86)\Steam\SteamApps\common\Doom 3 BFG Edition\ directory and run RBDoom3BFG.exe.

This should also work fine with your GOG installation.


The following instructions are primarily intented for Linux users and all hackers on other operating systems.

To play the game, you need the game data from a legal copy of the game.

Currently this requires a Windows installer, whether that be the GOG installer or by using Steam for Windows.

Note: the original DVD release of Doom 3 BFG contains encrypted data that is decoded by Steam on install.

On Linux and macOS the easiest way to install is with SteamCMD: https://developer.valvesoftware.com/wiki/SteamCMD. See the description on https://developer.valvesoftware.com/wiki/SteamCMD#Linux (macOS is directly below that) on how to install SteamCMD on your system. You won't have to create a new user.

Then you can download Doom 3 BFG with

> ./steamcmd.sh +@sSteamCmdForcePlatformType windows +login <YOUR_STEAM_LOGIN_NAME> +force_install_dir ./doom3bfg/ +app_update 208200 validate +quit

(replace <YOUR_STEAM_LOGIN_NAME> with your steam login name) When it's done you should have the normal windows installation of Doom 3 BFG in ./doom3bfg/ and the needed files in ./doom3bfg/base/ That number is the "AppID" of Doom 3 BFG; if you wanna use this to get the data of other games you own, you can look up the AppID at https://steamdb.info/

NOTE that we've previously recommended using download_depot in the Steam console to install the game data. That turned out to be unreliable and result in broken, unusable game data. So use SteamCMD instead, as described above.

Alternatively with the GOG installer, you can use Wine to install the game. See https://winehq.org/download for details on how to install wine for Linux and macOS.

Once Wine is installed and configured on your system install Doom 3 BFG edition using the downloaded installers from gog.com:

> wine setup_doom_3_bfg_1.14_\(13452\)_\(g\).exe

(there will be several .exe files from GOG, make sure all of them are in the same directory)

Once this is complete, by default you can find your Doom 3 BFG "base/" directory at ".wine/drive_c/GOG\ Games/DOOM\ 3\ BFG/base".

Note that you may want to create a autoexec.cfg file in whatever "base/" directory you use with the following content:

  • set sys_lang "english"

This will ensure the game and its menus are in english and don't default to something else. Alternatives include:

  • set sys_lang "english"
  • set sys_lang "french"
  • set sys_lang "german"
  • set sys_lang "italian"
  • set sys_lang "japanese"
  • set sys_lang "spanish"

Anyway:

  1. Install Doom 3 BFG in Steam (Windows version) or SteamCMD, make sure it's getting updated/patched.

  2. Create your own Doom 3 BFG directory, e.g. /path/to/Doom3BFG/

  3. Copy the game-data's base dir from Steam or GOG to that directory (e.g. /path/to/Doom3BFG/), it's in /your/path/to/Steam/steamapps/common/DOOM 3 BFG Edition/base/ or, if you used SteamCMD or GOG installer with Wine, in the path you used above.

  4. Copy your RBDoom3BFG executable and the optional FFmpeg DLLs (if Windows FFmpeg enabled) to your own Doom 3 BFG directory (/path/to/Doom3BFG). Your Doom 3 BFG directory now should look like:

    /path/to/Doom3BFG/

    • RBDoom3BFG (or RBDoom3BFG.exe on Windows)
    • avcodec-58.dll (Windows FFmpeg only)
    • avformat-58.dll (Windows FFmpeg only)
    • avutil-56.dll (Windows FFmpeg only)
    • swresample-3.dll (Windows FFmpeg only)
    • swscale-5.dll (Windows FFmpeg only)
    • base/
      • classicmusic/
      • _common.crc
      • (etc)
  5. On macOS the RBDoom3BFG executable will also search for game data within an app bundle's Contents/Resources/base folder, and as a last resort, within the absolute path /Applications/RBDoom3BFG.app/Contents/Resources/base. In addition, if you want the game to be standalone without dependencies on pre-installed dynamic libs, you can use macdylibbundler to bundle all external dylib dependencies into the app bundle (see https://github.com/auriamg/macdylibbundler or simply install via "brew install dylibbundler" or "sudo port install dylibbundler"). For example, the following command will copy all external dylib dependencies to the Contents/libs directory of the game's app bundle and adjust the rpaths within the RBDoom3BFG executable and copied dylibs.

     > dylibbundler -od -b -x RBDoom3BFG.app/Contents/MacOS/RBDoom3BFG -d RBDoom3BFG.app/Contents/libs/
    

    After running dylibbundler you may need to re-sign the modified executable and dylibs if planning to run on Apple Silicon machines. Newer versions of dylibbundler now do this automatically. The output of dylibbundler will indicate which executable and dylibs (if any) require re-signing. This code signing step is not needed for x86-based Macs.

     > codesign -s - --force RBDoom3BFG.app/Contents/libs/lib<modified-by-dylibbundler>.dylib
     ...
     > codesign -s - --force RBDoom3BFG.app/Contents/MacOS/RBDoom3BFG
    
  6. Run the game by executing the RBDoom3BFG executable.

  7. Enjoy

  8. If you run into bugs, please report them, see Bug Reports


New Console Variables and Commands

Gaming Related

Name Description
r_graphicsAPI Default DX12, can be either DX12 or Vulkan on Windows
r_antiAliasing Different Anti-Aliasing modes
r_exposure [0 .. 1] Default 0.5, controls brightness and affects HDR -> sRGB Rec. 709 exposure key. This is what you change in the video brightness options
r_useSSAO [0 .. 1] Use Screen Space Ambient Occlusion to darken the corners in the scene and give it more depth
r_forceAmbient Default 0.5, controls additional brightness by Global Illumination
r_useFilmicPostFX [0, 1] Apply several post process effects to mimic a filmic look
r_useCRTPostFX [0 .. 2] CRT monitor/TV filter
r_renderMode [0 .. 5] Default 0 = Doom 3, 1 = Commodore 64, 2 = Commodore 64 Highres, 3 = Amstrad CPC, 4 = Amstrad CPC Highres, 5 = Sega Genesis, 6 = Sega Genesis Highres, 7 = Sony PSX

Modding Support

Name Description
dmap mapfile Command: Compiles a .map to its corresponding BSP .proc, Collision .cm files and Area Awareness System (AI navigation) .aas files. Just type dmap to list all options
dmap [glview] mapfile DMap option that exports the BSP areas and portals to .obj for debugging purposes
bakeEnvironmentProbes Command after loading a map. Captures all env_probe entities and stores them to disc
bakeLightGrids [<switches>...] <Switches> limit[num] : max probes per BSP area (default 16384) bounce[num] : number of bounces or number of light reuse (default 1) grid( xdim ydim zdim ) : light grid size steps into each direction (default 64 64 128)
exportScriptEvents Command: Generates a new script/doom_events.script that reflects all registered class events in the idClass C++ system. The gamecode still needs to be extended to add the original comments of the events
exportFGD [nomodels] Command: Exports all entity defs to base/_tb/*.fgd for usage in convertMapToValve220 <map>
exportImagesToTrenchBroom Command: Decompresses and saves all TB relevant .bimage images to base/_tb/*.png files
exportModelsToTrenchBroom Command: Saves all binarized models to base/_tb/*.obj files
convertMapToValve220 <map> Command: Saves *_valve220.map version of the given map. This makes it editable with TrenchBroomBFG.
convertMapQuakeToDoom <map> Command: Expects a Quake 1 .map in the Valve220 format and does some Doom 3 specific fixes
makeZooMapForModels Command: Makes a Source engine style zoo map with mapobject/models like .blwo, .base et cetera and saves it to maps/zoomaps/zoo_models.map. This helps mappers to get a good overview of the trememdous amount of custom models available in Doom 3 BFG by sorting them into categories and arranging them in 3D. It also filters models so that only modular models are picked that can be reused in new maps.
exportEntityDefsToBlender Command: Exports all entity and model defs to base/_bl/entities.json for usage in Blender before loading a map.
exportMapToOBJ Command: Convert .map file to .obj/.mtl
postLoadExportFlashAtlas Cvar: Set to 1 at startup to dump the Flash images to exported/swf/
postLoadExportFlashToSWF Cvar: Set to 1 at startup to dump the Flash .bswf files as .swf (WIP)
postLoadExportFlashToJSON Cvar: Set to 1 at startup to dump the Flash .bswf files as .json. Can be reimported into the engine and imported into Blender for inspection
swf_show Cvar: Draws the bounding box of instanced Flash sprites in red and their names
makeMaterials <folder> Command: Make a .mtr file based on PBR naming conventions

Known Issues

  • Some lights cause shadow acne with shadow mapping or look off ("Peter panning" problem).
  • Some shadows in the original campaigns might almost disappear due to bad light properties like light center near outside of the bounding box. This has been partially fixed by patching those light entities.

Bug Reports

The best way for telling about a bug is by submitting a bug report at our GitHub bug tracker page:

https://github.com/RobertBeckebans/RBDOOM-3-BFG/issues?state=open

If you want to report an issue with the game, you should make sure that your report includes all information useful to characterize and reproduce the bug.

  • Search on Google
  • Include the computer's hardware and software description ( CPU, RAM, 3D Card, distribution, kernel etc. )
  • If appropriate, send a console log, a screenshot, an strace ..
  • If you are sending a console log, make sure to enable developer output:

RBDoom3BFG.exe +set developer 1 +set logfile 2

You can find your qconsole.log on Windows in C:\Users<your user name>\Saved Games\id Software\RBDOOM 3 BFG\base\


FAQ

Q: Why bother with DOOM-3-BFG in 2021? A: It is fun, period. Doom 3 is from 2004 but it is still an impressive and entertaining game. In 2011 id Software added many results from the development of Rage like its own Flash SWF and ActionScript 2 interpreter, proper support for gamepads and widescreens. It also combines the gamecode for Doom 3 and its missionpacks and runs it in a seperate thread and it has many multithreaded rendering optimizations. DOOM-3 and DOOM-3-BFG are some of the most transparent games available where you can open all files and inspect how the game was built. Unlike Quake 1-3, DOOM-3-BFG shipped with all level .map sources for 47 single player maps. There is plenty of stuff you can learn from it like solid run & gun core gameplay, AI, animations, client/server multiplayer, level design or simple and elegant engine design.

Q: Why bother with DOOM-3-BFG in 2023? A: The engine compiles faster than opening a project in Unity. Maybe you just appreciate that it doesn't require more than 300 MB of RAM and 1024 MB of VRAM while running a complex game like Doom 3.

Q: Can I use this engine to make a commercial game? A: You can but don't bother me to give you free support and you probably should use Unreal Engine 4/5. I am a full time game developer and usually don't have time for any free support. I recommend that you have moderate C++ skills even if you are an artist. Technical designers (coders who became artists) might benefit most from this engine. Keep in mind that the GPL license will lock you out of the console markets because you can't use proprietary APIs covered by NDAs. However you can sell your game on Steam without problems.

Some people already work on total conversions and there is a community on the id Tech 4 Discord server where you can ask questions and get some support: https://discord.gg/Q3E9rUFnnP

Q: How do I know what code you've changed? A: Apart from the Git log diffs, you can look for // RB in the source code. Many other contributors commented their changes in the same way. I enforced the usage of Astyle in this project which also makes it alot easier to compare it against other ports of DOOM-3-BFG. Simply format the other ports with Astyle like I do in neo/astyle-code.bat and you can compare the code easily in WinMerge or KDiff3.

Q: How do I open the .resource files? A: If you install this package you can start the engine, open the console and run exec extract_resources.cfg. This will create a basedev/ folder next to your base/ folder with the indidividual files like .mtr materials or .def entity declarations.

rbdoom-3-bfg's People

Contributors

abergmeier avatar admer456 avatar bielbdeluna avatar codelikecxk avatar codes4fun avatar coldtobi avatar danielgibson avatar danmcgoo avatar davidfoerster avatar dsalt avatar ericwomer avatar glkarin avatar harrievg avatar infapi00 avatar jansimek avatar jpcy avatar lwss avatar palmalcheg avatar r-a-sattarov avatar raynorpat avatar robertbeckebans avatar rtollert avatar shaneutt avatar srsaunders avatar stephenap07 avatar tomgreen66 avatar vloup avatar wintermute0110 avatar y2keeth avatar yamagi 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

rbdoom-3-bfg's Issues

Red screen flash on damage does not dissapear until load or full health

I'm running Ubuntu 12.10 with the latest nVidia drivers (313.26). When taking damage the red screen flash occurs normally, but appears to stack stuck to the screen at it's apex of visibility and does not leave until you load a new area or return to full health.

I apologies, but I don't know what information to provide in order to best assist in debugging this, please let me know what you would need from me as far as logs and information and I will happily attach them to this issue.

[BUG] Stereoscopic view makes game screen all black

I'm testing RBDOOM-3-BFG on Linux...

When activated the Stereoscopic 3D (Doom 3 BFG -> Main menu -> 3D Options -> 3D View -> ON) the screen got all black. I closed the program (It was in windowed mode), then when running the game it always was all black.

To solve it, I had to restore this setting from the configuration file (~/.rbdoom3bf/base/D3BFGConfig.cfg) changing the:

set stereoRender_enable from "1" to "0"

and removing the profile (~/.rbdoom3bfg/base/savegame/profile.bin).

My specs

CPU: Core 2 Quad Q6600
RAM: 2GB DDR 3
VGA: Radeon HD 5570 Driver v. 8.84
MB: MSI P35 NEO Combo
OS: Ubuntu 11.04 64bit

PS: Thanks a lot for this port.

Texture compression artifacts

So I did some testing and R&D, and it's clear that BFG engine screws up colors on textures badly, even when image_HighQualityCompression is set to 1.

So either RGB to YCoCg colorspace conversion is messed up, or YCoCgDXT5 encoder is messed up.

Would it be possible to replace YCoCgDXT5 with YCoCg scaled DXT5 as the latter produces textures of quality almost identical to TGA ?

Necks stretched.

I'm seeing all the characters have their necks stretched out.

bug

I have an nvidia card with driver version 310.19

Super Shotgun does not work

WARNING: file def/weapon_shotgun_double.def, line 55: Model 'models/md5/weapons doublebarrel_view/new/dbviewmesh.md5mesh' defaulted
WARNING: file def/weapon_shotgun_double.def, line 39: Model 'models/md5/weapons/shotgun_double_world/worlddbshotgun.md5mesh' defaulted

SDL_SCANCODE_GRAVE

SDL_SCANCODE_GRAVE not declared in this namespace.
I'm replace to SDLK_BACKQUOTE - it's worked.

idPlane::RayIntersection may result in uninitialized scale

I am trying to fix the warnings in the source and encountered that the success value of idPlane::RayIntersection is almost never checked. This may lead to undefined behavior.
I would propose to add warn_unused to the function signature and define this warning as an error (for gcc and clang that is).

Crash attempting to load a map when all .resources are unpacked and .resources files are removed

Win7 x64, Radeon HD 6870, Compiled w/MSVS 2013 (cmake option -G "Visual Studio 12")

I've extracted the contents of all of the resource files and removed the .resources files from the /base/ path. Shortly after issuing "map game/mars_city1" in the console the game crashes. Unfortunately using "logFile 2" doesn't capture any interesting warnings or errors: the game reports normal shader compilation warnings and starts the game init (last line of qconsole.log reads "----------- Game Map Init ------------").

If any .resources file is present the game will load a map just fine. This has been tested with _common.resources and also by making a custom 'dummy' resource file with "updateResourceFile typo.resources typo.txt" where typo.txt is a plain text file.

I suspect there's a bug in the resource file manager or the game map init code that prevents searching the base path for files unless at least one resource file is loaded.

Edit: RBDoom3BFG run with +seta fs_resourceLoadPriority 0

Fails to compile on Ubuntu 12.04 64bit

Linking CXX executable RBDoom3
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:275: error: undefined reference to 'clock_gettime'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:589: error: undefined reference to 'dlsym'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:590: error: undefined reference to 'dlerror'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:569: error: undefined reference to 'dlopen'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:572: error: undefined reference to 'dlerror'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:606: error: undefined reference to 'dlclose'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/linux/linux_main.cpp:216: error: undefined reference to 'clock_gettime'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/linux/linux_main.cpp:216: error: undefined reference to 'clock_gettime'
/home/motorsep/games/RBDOOM-3-BFG/neo/sys/linux/linux_main.cpp:216: error: undefined reference to 'clock_gettime'
collect2: ld returned 1 exit status
make[2]: *** [RBDoom3] Error 1
make[1]: *** [CMakeFiles/RBDoom3.dir/all] Error 2
make: *** [all] Error 2

Multiplayer doesn't work (unless I am not doing something right)

Basically since there is no guide whatsoever, I tried running server with the following cmd arguments:

BFG.exe +set win_allowMultipleInstances 1 +set com_allowConsole 1 +set com_skipIntroVideos 1 +set net_headlessServer 0 +set net_port 27666 +set net_inviteOnly 0 +set ui_name "" +map game/mp/d3dm1

and client to connect to it with this (where XX.XXX.XXX.XX is my IP obviously :) ):

BFG.exe +set win_allowMultipleInstances 1 +set com_allowConsole 1 +set com_skipIntroVideos 1 +set net_inviteOnly 0 +set ui_name "motorsep" +connect XX.XXX.XXX.XX:27666

When "server" starts, I have black screen on the server instance. When client connects, it says "Invalid game". Port forwarding is set up correctly.

Windows 7 Pro 64bit, RBDoom3BFG 32bit

Where is the catch?

Game freezes on autosave when new game is started from the menu

Win7 32bit, gtx275

RBDOOM-3-BFG launches fine, gets into the menu, but when starting new game it takes forever to load level and it hangs on autosave at the beginning of the level.

Loading map from the console works well and autosave doesn't hang the game.

compile error

Getting these errors on Ubuntu 12.04 64bit

/RBDOOM-3-BFG/neo/sys/posix/posix_savegame.cpp:142:9: error: 'class idLocalUserWin' has no member named 'StorageSizeAvailable'
/RBDOOM-3-BFG/neo/sys/posix/posix_savegame.cpp:149:10: error: 'class idLocalUserWin' has no member named 'StorageSizeAvailable'

Thanks, and keep up the good work.

in erebus1 map, an assertion in RB_DrawElementsWithCounters() fails

It happens in the erebus1 map (the first of the RoE addon) while the cutscene at the beginning is running, I think about at the time the wall is blown open.

if( surf->jointCache )
{
if( !verify( renderProgManager.ShaderUsesJoints() ) )

    if( surf->jointCache )
    {
        if( !verify( renderProgManager.ShaderUsesJoints() ) )
            ...

verify() (which calls assert() in debug builds) fails.
This means that surf->jointCache at that point is not NULL, but the used shader - blendlight.vfp according to gdb - does not use joints.

On Linux this currently causes the game to crash in debug builds.

Segmentation fault when loading game in RoE & strange graphics when using artefact

First of all, great work porting the Doom 3 BFG edition to Linux. I am very grateful for this, I don't have Windows and being able to play it on my favourite Linux distribution is simply wonderful. Unfortunately, there are some problems I ran into.

  1. This already happened in the Doom 3 campaign, but the game loaded fine after several attempts. In the RoE campaign though, I am completely unable to load saved games, no matter how often I try. When choosing any saved game, the program exits on a segmentation fault. I have put the output of the terminal on pastebin.com:
    http://pastebin.com/BpAd1Qdy

Please help!

My system specs:
Ubuntu 12.04
3 Gigs of Ram
AMD Radeon HD 6770 graphics card
Graphics driver from the Ubuntu repository (flgrx)

  1. The first time I ran the game, so before the problem described above occurred, I got strange graphics when using the artifact. I can't make a screenshot obviously as I can't run the game anymore. I shall attempt to describe it. When activating the artifact, the center of the screen goes black and only the edges of the screen are visible. When I move around, only the center of the screen shows any change, the center just stays black.

If you can help me, I would be much obliged. Thanks.

/ broekeman.

signal caught: Segmentation fault

Doom 3 BFG segfaults after starting a new campeign. I have neven been able to run a game.
software:
Debian Wheezy, all updates applied.
amd-driver-installer-catalyst-13-4-x86.x86_64.run
Copied RBDOOM-3-FG from RobertBeckebans/RBDOOM-3-BFG forked from id-Software/DOOM-3-BFG (Wed Jul 17 21:07:40 CEST 2013), which is master branche.

Build commands

sudo apt-get update; sudo apt-get install cmake libsdl1.2-dev libopenal-dev
cd src/doom3/RBDOOM-3-BFG-master/
cd neo/
./cmake-eclipse-linux-profile.sh
cd ../build/
make -j5

Installation

cd ~/.../.../
mkdir Doom3BGF
cd Doom3BFG
unzip base directory(source steam) into current directory
ls -al
total 4050888
drwxr-xr-x 3 user user 4096 Jul 17 19:08 .
drwxr-xr-x 5 user user 4096 Jul 17 18:05 ..
drwxr-xr-x 9 user user 4096 Jul 17 21:00 base
-rwxr-xr-x 1 user user 3988171993 Jul 17 18:58 base.zip
-rwxr-xr-x 1 user user 159917557 Jul 17 18:06 RBDoom3BFG

After first try, see logs below i tried copying renderprogs directory from the sources/base in to base directory, game still fails to start.

Logging

Run command

./RBDoom3BFG +set developer 1 +set logfile 2

...

WARNING: 0:50: warning(#375) Redeclaration of built-in name: gl_FragColor

signal caught: Segmentation fault
si_code 1
Trying to exit gracefully..
session->GetSaveGameManager().CancelToTerminate();
soundSystem->StopAllSounds();
Stop();

--------- Game Map Shutdown ----------

CleanupShell();
delete loadGUI;
delete renderWorld;
delete soundWorld;
delete menuSoundWorld;
session->ShutdownSoundRelatedSystems();
session->Shutdown();
game->Leaderboards_Shutdown();
uiManager->Shutdown();
soundSystem->Shutdown();
usercmdGen->Shutdown();
eventLoop->Shutdown();
declManager->Shutdown();
renderSystem->Shutdown();
idRenderSystem::Shutdown()
Shutting down OpenGL subsystem
...shutting down QGL
commonDialog.Shutdown();
UnloadGameDLL();
------------ Game Shutdown -----------

--------- Game Map Shutdown ----------

Shutdown event system

saveFile.Clear( true );
stringsFile.Clear( true );
CloseLogFile();
fileSystem->Shutdown( false );
Sys_Shutdown();
console->Shutdown();
idKeyInput::Shutdown();
cvarSystem->Shutdown();
cmdSystem->Shutdown();
ClearWarnings( GAME_NAME " shutdown" );
warningCaption.Clear();
errorList.Clear();
idLib::ShutDown();
shutdown terminal support

ldd dump

ldd RBDoom3BFG
linux-vdso.so.1 => (0x00007fffb1fff000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007ff60958a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff60936e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff609169000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff608f61000)
libSDL-1.2.so.0 => /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 (0x00007ff608cc5000)
libopenal.so.1 => /usr/lib/x86_64-linux-gnu/libopenal.so.1 (0x00007ff608a6a000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff608763000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff6084e1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff6082ca000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff607f40000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007ff607d2e000)
libatiuki.so.1 => /usr/lib/libatiuki.so.1 (0x00007ff607c12000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff6097b8000)
libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007ff60791e000)
libpulse-simple.so.0 => /usr/lib/x86_64-linux-gnu/libpulse-simple.so.0 (0x00007ff607719000)
libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007ff6074ce000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007ff607193000)
libdirectfb-1.2.so.9 => /usr/lib/x86_64-linux-gnu/libdirectfb-1.2.so.9 (0x00007ff606f0e000)
libfusion-1.2.so.9 => /usr/lib/x86_64-linux-gnu/libfusion-1.2.so.9 (0x00007ff606d03000)
libdirect-1.2.so.9 => /usr/lib/x86_64-linux-gnu/libdirect-1.2.so.9 (0x00007ff606aeb000)
libcaca.so.0 => /usr/lib/x86_64-linux-gnu/libcaca.so.0 (0x00007ff606a1e000)
libts-0.0.so.0 => /usr/lib/x86_64-linux-gnu/libts-0.0.so.0 (0x00007ff60681a000)
libpulsecommon-2.0.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-2.0.so (0x00007ff6065b7000)
libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007ff6063b2000)
libjson.so.0 => /lib/x86_64-linux-gnu/libjson.so.0 (0x00007ff6061a8000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007ff605f62000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007ff605d41000)
libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007ff6059ab000)
libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5 (0x00007ff60577a000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007ff605551000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff60533a000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007ff605138000)
libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007ff604f1d000)
libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007ff604d16000)
libXtst.so.6 => /usr/lib/x86_64-linux-gnu/libXtst.so.6 (0x00007ff604b10000)
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007ff604905000)
libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007ff60469e000)
libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007ff604498000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007ff604293000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007ff60408f000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007ff603e8a000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007ff603c84000)
libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007ff603a75000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007ff60385d000)
libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007ff603611000)
libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007ff603141000)
libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007ff602f14000)
libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007ff602d0e000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff602af7000)

snippet from qconsole.log


WARNING: 0:50: warning(#375) Redeclaration of built-in name: gl_FragColor

--------- Game Map Shutdown ----------

idRenderSystem::Shutdown()
Shutting down OpenGL subsystem
...shutting down QGL
------------ Game Shutdown -----------

--------- Game Map Shutdown ----------

Shutdown event system

I hope this log helps you guys fix the game. Thank you for porting Doom3 BFG to Linux.

Cheers.

Player starts out with the Soul Cube in Doom 3

At least in the original game, when you're in the Mars City Underground and get your gear for the first time, the soul cube is added to the inventory. It's a major cheat in the early game and somewhat of a plot spoiler.

The Soul Cube's also available from the beginning in Lost Mission, but I haven't been successful in getting the Steam version of the game running in Wine, so I can't really check to see if that's intentional...

[BUG] "Unmapped SDL key"

On Doom 3 BFG Edition, if I open the console and try to write the /character I get the error: WARNING: Unmapped SDL key 47 ( 0x2f ) scancode 97 and the character is not printed. This also happens for \ and other characters.

My specs

CPU: Core 2 Quad Q6600
RAM: 2GB DDR 3
VGA: Radeon HD 5570 Driver v. 8.84
MB: MSI P35 NEO Combo
OS: Ubuntu 11.04 64bit
Kernel: 2.6.38-16-generic
Gnome 2.32.1

Error compiling with GCC 4.8.1

Hello,

I've got the following error when compiling on Fedora 19 x86_64 (GCC 4.8.1) with distribution's default optimizations:

DEBUG: /builddir/build/BUILD/RBDoom3BFG/neo/renderer/RenderSystem_init.cpp: In function 'void R_CheckPortableExtensions()':
DEBUG: /builddir/build/BUILD/RBDoom3BFG/neo/renderer/RenderSystem_init.cpp:628:52: error: invalid conversion from 'void (*)(unsigned int, unsigned int, unsigned int, unsigned int, int, const char*, void*)' to 'GLDEBUGPROCARB {aka void (*)(unsigned int, unsigned int, unsigned int, unsigned int, int, const char*, const void*)}' [-fpermissive]
DEBUG:     qglDebugMessageCallbackARB( DebugCallback, NULL );
DEBUG:                                                     ^
DEBUG: make[2]: *** [CMakeFiles/RBDoom3BFG.dir/renderer/RenderSystem_init.cpp.o] Error 1

Thanks & regards,
--SImone

SDL joystick input handling unimplemented

In sdl/sdl_events.cpp, all of the joystick input functions are stubbed. I was hopping to be able to use a PS3 joystick in linux. Not sure if it has anything to do with the 1.2-2.0 migration.

Remove references to 'soft' OpenAL definitions

idSoundSample_OpenAL's OpenALSoftChannelsName, OpenALSoftTypeName, FramesToBytes, BytesToFrames, and GetOpenALSoftFormat were causing compile errors for me on Linux Mint 13 x86_64. I was able to successfully build by wrapping those functions in an #if 0.
Since the functions aren't actually referenced (that code that was using them was commented out), I'd suggest commenting out the functions as well, or including them only if the macros are defined.

Video Disks not working.

Hello, I'm running the 64-bit version of Arch Linux. All dependencies and such are there and it runs fantastic, thanks for this! But there seems to be a issue. The videos in the PDA show a thumbnail, but when you select them, they just turn all black and play only the audio. No video. Any idea? Also any information you may need I can supply.

I'm using a NVIDIA GTX 680 running the latest stable driver as of this writing. Not sure what else may be pertinent.

[BUG] Map Mars City 2 won't load

Map Mars City 2 won't load.

Here is the console dump ending:

----------- Game Map Init ------------
collision data:
   576 models
 54823 vertices (1284 KB)
 99531 edges (3499 KB)
 85852 polygons (6197 KB)
 11150 brushes (1546 KB)
 14696 nodes (688 KB)
 70890 polygon refs (1107 KB)
 18706 brush refs (292 KB)
 31665 internal edges
  1919 sharp edges
     0 contained polygons removed
     0 polygons merged
 14616 KB total memory used
20 msec to load collision data.
Preloading collision models...
00168 collision models preloaded ( or were already loaded ) in   0.0 s
econds
----------------------------------------
map bounds are (6860.0, 4480.0, 1136.0)
max clip sector is (214.4, 280.0, 142.0)
   11 KB passage memory used to build PVS
    1 msec to calculate PVS
  104 areas
  244 portals
   11 areas visible on average
    1 KB PVS data
[Load AAS]
loading maps/game/mars_city2.aas48
done.
[Load AAS]
loading maps/game/mars_city2.aas96
WARNING: Couldn't load AAS file: 'maps/game/mars_city2.aas96'
[Load AAS]
loading maps/game/mars_city2.aas_guardian
WARNING: Couldn't load AAS file: 'maps/game/mars_city2.aas_guardian'
[Load AAS]
loading maps/game/mars_city2.aas_mancubus
WARNING: Couldn't load AAS file: 'maps/game/mars_city2.aas_mancubus'
[Load AAS]
loading maps/game/mars_city2.aas_sabaoth
WARNING: Couldn't load AAS file: 'maps/game/mars_city2.aas_sabaoth'
[Load AAS]
loading maps/game/mars_city2.aas_cyberdemon
WARNING: Couldn't load AAS file: 'maps/game/mars_city2.aas_cyberdemon'

Entering doom_main()
Exiting doom_main()
Spawning entities
WARNING: file def/monster_zsec_pistol.def, line 70: Model 'models/md5/
monsters/zombies/zsec_pistol/zsecpistol.md5mesh' defaulted
WARNING: idAF::Load: articulated figure 'monster_zombie_security_pisto
l' for entity 'monster_zsec_pistol_12' at (-2376 -1344 152) has no or
defaulted modelDef ''
WARNING: idIK::Init: IK for entity 'monster_zsec_pistol_12' at (-2376
-1344 152) has no model set.
--------- Game Map Shutdown ----------
--------------------------------------
********************
ERROR: Joint 'Shoulders' not found for 'head_joint' on 'monster_zsec_p
istol_12'
********************

Something interesting is that on my base folder in Windows there is no generated folder, probably because this folder is generated when a map is loaded, I never executed the game on Windows before copying the base folder, just installed the 1.01 patch. In Linux the folder contains this:

generated
├── collision
│   └── models
│       └── gibs
│           └── skull_pork.bcmodel
└── rendermodels
    └── models
        ├── gibs
        │   └── skull_pork.blwo
        └── md5
            ├── monsters
            │   ├── maggot3
            │   │   └── maggot3.bmd5mesh
            │   ├── pinky
            │   │   └── pinky.bmd5mesh
            │   ├── zfat
            │   │   └── zfat.bmd5mesh
            │   ├── zjump
            │   │   └── zjump.bmd5mesh
            │   └── zombies
            │       ├── bernie
            │       │   └── bernie.bmd5mesh
            │       ├── boney
            │       │   └── boney.bmd5mesh
            │       ├── morgue
            │       │   └── morgue.bmd5mesh
            │       └── zsec_pistol
            │           └── zsecpistol.bmd5mesh
            └── props
                └── wrench.bmd5mesh

Notice it has the zombie mesh. All bmd5mesh files have 1.4 KB so they may be generated wrong.

[BUG] Game wont restart after settings have been changed

When you change a setting that requires a game restart (Ex: Graphics options on system) it will ask if you want to restart now, if you click yes, the game will not restart and will "lock" the session (mouse will not move and alt+tab will not work).
Game was running in windowed mode.

I had to go to another session (ctrl + alt + f2) and then kill the process.

My specs

CPU: Core 2 Quad Q6600
RAM: 2GB DDR 3
VGA: Radeon HD 5570 Driver v. 8.84
MB: MSI P35 NEO Combo
OS: Ubuntu 11.04 64bit
Kernel: 2.6.38-16-generic
Gnome 2.32.1

Segfault on exit

Ubuntu 12.04 64-bit SDL1

[Thread 0x7fffeeaa4700 (LWP 2955) exited]
[Thread 0x7fffef2a5700 (LWP 2954) exited]

Program received signal SIGSEGV, Segmentation fault.
0x0000000000b11c62 in idStrPool::FreeString (this=0x1627480, poolStr=0x2980d40)
at /home/motorsep/games/RBDOOM-3-BFG/neo/idlib/../idlib/containers/StrPool.h:200
200 delete pool[i];

Backtrace:
#0 0x0000000000b11c62 in idStrPool::FreeString (this=0x1627480,

poolStr=0x2980d40)
at /home/motorsep/games/RBDOOM-3-BFG/neo/idlib/../idlib/containers/StrPool.h:200

#1 0x0000000000b14483 in FreeString (poolStr=, this=0x1627480)

at /home/motorsep/games/RBDOOM-3-BFG/neo/idlib/../idlib/containers/StrPool.h:175

#2 idDict::Clear (this=0x161f1f8)

at /home/motorsep/games/RBDOOM-3-BFG/neo/idlib/Dict.cpp:233

#3 0x0000000000af93ee in ~idDict (this=0x161f1f8, __in_chrg=)

at /home/motorsep/games/RBDOOM-3-BFG/neo/sys/../idlib/../idlib/Dict.h:224

#4 idSessionLocal::~idSessionLocal (this=0x161b320, __in_chrg=)

at /home/motorsep/games/RBDOOM-3-BFG/neo/sys/sys_session_local.cpp:138

#5 0x00007ffff665f901 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#6 0x00007ffff665f985 in exit () from /lib/x86_64-linux-gnu/libc.so.6
#7 0x0000000000b03c2b in Posix_Exit (ret=0)

at /home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:118

#8 0x0000000000b03c8b in Sys_Quit ()

at /home/motorsep/games/RBDOOM-3-BFG/neo/sys/posix/posix_main.cpp:172

#9 0x0000000000a04a6d in idMenuHandler_Shell::idSWFScriptFunction_QuitDialog::Call (this=0x58e2860, thisObject=, parms=...)

at /home/motorsep/games/RBDOOM-3-BFG/neo/d3xp/menus/MenuHandler_Shell.cpp:939

#10 0x00000000007a9650 in idSWFScriptFunction_Script::Run (

this=<optimized out>, thisObject=0x36e14a0, stack=..., bitstream=...)
at /home/motorsep/games/RBDOOM-3-BFG/neo/swf/SWF_ScriptFunction.cpp:1011

#11 0x00000000007ab6ec in idSWFScriptFunction_Script::Call (this=0x49613f0,

thisObject=0x36e14a0, parms=...)
at /home/motorsep/games/RBDOOM-3-BFG/neo/swf/SWF_ScriptFunction.cpp:250

#12 0x00000000007bf0a2 in idSWF::HandleEvent (this=0x3692250,

event=0x7fffffffdaa0)
at /home/motorsep/games/RBDOOM-3-BFG/neo/swf/SWF_Events.cpp:287

#13 0x00000000005d62c0 in idCommonDialog::HandleDialogEvent (

this=<optimized out>, sev=<optimized out>)
at /home/motorsep/games/RBDOOM-3-BFG/neo/framework/Common_dialog.cpp:1569

#14 0x00000000005c32d8 in idCommonLocal::ProcessEvent (this=0xdabe80,

event=0x7fffffffdaa0)
at /home/motorsep/games/RBDOOM-3-BFG/neo/framework/Common.cpp:1691

#15 0x00000000005fc247 in idEventLoop::ProcessEvent (this=,

ev=...)
at /home/motorsep/games/RBDOOM-3-BFG/neo/framework/EventLoop.cpp:186

#16 0x00000000005fc406 in idEventLoop::RunEventLoop (this=0xdcd240,

commandExecution=<optimized out>)
at /home/motorsep/games/RBDOOM-3-BFG/neo/framework/EventLoop.cpp:221

#17 0x00000000005d840c in idCommonLocal::Frame (this=0xdabe80)

at /home/motorsep/games/RBDOOM-3-BFG/neo/framework/common_frame.cpp:473

#18 0x0000000000b109bd in main (argc=, argv=)

at /home/motorsep/games/RBDOOM-3-BFG/neo/sys/linux/linux_main.cpp:689

Compression for .resource files

Do you think you could add compression to .resource files (zip)? Just seems like waste of HDD space, considering that assets are duplicated. BFG could at least take up 3Gb vs 7Gb on HDD :)

[BUG] Map Mars City Underground won't load

When I load the map Mars City Underground or finish the first level, and go to this map it won't load.

Here is the console dump ending:

----- Initializing Sound System ------
Setup OpenAL device and context... Done.
OpenAL vendor: OpenAL Community
OpenAL renderer: OpenAL Soft
OpenAL version: 1.1 ALSOFT 1.12.854
OpenAL extensions: AL_EXTX_buffer_sub_data AL_EXT_DOUBLE AL_EXT_EXPONE
NT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_M
CFORMATS AL_EXT_MULAW AL_EXT_MULAW_MCFORMATS AL_EXT_OFFSET AL_EXTX_sam
ple_buffer_object AL_EXT_source_distance_model AL_LOKI_quadriphonic
sound system initialized.
--------------------------------------

...

OpenAL Error: Invalid Value (0xa003), @ /home/anthonygaudino/Downloads
/RBDOOM-3-BFG-master/neo/sound/OpenAL/AL_SoundSample.cpp 356
--------- Game Map Shutdown ----------
WARNING: idSessionLocal::Pump was not called for 3 seconds
--------------------------------------
********************
ERROR: idSoundSample_OpenAL::CreateOpenALBuffer: error loading data in
to OpenAL hardware buffer
********************

After updating my video driver my console is throwing a lot of shader warnings and the dump has more than 2700 lines. Since the map didn't load before and showed the same OpenAL error I'm just showing this part of the console.

My specs

CPU: Core 2 Quad Q6600
RAM: 2GB DDR 3
VGA: Radeon HD 5570 Driver v. 8.84
MB: MSI P35 NEO Combo
OS: Ubuntu 11.04 64bit
Kernel: 2.6.38-16-generic
Gnome 2.32.1
libopenal: Ubuntu package libopenal1 v. 1:1.12.854-2
libsdl: Ubuntu package libsdl v. 1.2

Can not debug on Windows

So I build Debug build, trying to debug an issue. When I run Debug from MSVC 2010 Express, I get:

These projects are out of date:
ZERO_CHECK Debug Win32
ALL_BUILD Debug Win32

Would you like to build them? YES!

Unable to start program "\build\Debug\ALL_BUILD." The system can not find specified file.

How to tackle this issue? Thanks.

recordDemo double fault Segmentation fault

]recordDemo bfg_bench1
writing to: /home/motorsep/.rbdoom3bfg/base/demos/bfg_bench1.demo
recording to demos/bfg_bench1.demo

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffd14f0700 (LWP 9711)]
0x00000000006b4a37 in idRenderWorldLocal::WriteVisibleDefs (this=0x28d34c0,
viewDef=0x7fffd54f1180)
at /home/motorsep/games/RBDOOM-3-BFG/neo/renderer/RenderWorld_demo.cpp:330
330 if( ent->archived )

Backtrace: http://pastebin.com/JgSLGNQM

Question regarding menu

Is there a way to prevent the game selection menu when starting RBDoom3BFG? By means of patching to the code or parameters passed to the engine.

I'm not asking to have it committed but I would like to do it in my local build.

Thanks,
--Simone

Default Release Build

# build type
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release")
endif()
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG -DID_PC -DID_RETAIL -O3 -ffast-math -fno-unsafe-math-optimizations -fomit-frame-pointer -fno-strict-aliasing ${my_warn_flags}")

massive graphics corruption under Intel HD 4600

OS: Fedora 19 64-bit

CPU and GPU: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz

massive-corruption

On terminal I see tons of messages like,

GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION
GL_CheckErrors: GL_INVALID_OPERATION

I can hear the background and menu sounds just fine.

"Insufficient storage space" after game launches on Linux

Compiled, launched. As soon as the screen with Doom1,2 and BFG choices shows up, the game posts on the bottom of the screen "Insufficient space for data storage. Free at least 5.1Mb" or something of that nature. Needless to say the system partition has 28Gb free and $HOME has ~50Gb of free space (I run RBDoom3 from $HOME/games/doom3bfg/ ).

Ubuntu Linux 12.04 64bit

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.