Quake 4

Quake 4

Not enough ratings
Quake 4 Config Optimized for Newer Hardware (WIP)
By Zeptomonkey
Welcome to my Config file for Quake 4, after doing extensive amounts of research about this version of the Id Tech engine I have managed to find variables to achieve the maximum quality whilst maintaining good fps on modern machines here is what i found (if people want explanations for each of these please leave a comment about it.

   
Award
Favorite
Favorited
Unfavorite
Where to Find the Config File and how to make sure it doesn't reset
to find the config right click on the game in your library then click on "properties". open the "q4base" folder then search for a config file in that folder called "quake4config.cfg" (may also just be called quake4config). open it and simply copy and paste everything in my guide. Once youve done that save the file (if you use notepad head to the top left and click on the "file" button then click the "save button"). then right click the file and click on the button called "properties" then on the tab that opens up click the box called "read only" (should have a check mark on it once pressed" then hit "ok" and youre good to go hope you enjoy.

Note: be sure to read whats at the bottom to avoid issues.
Config File Variables Part 1
unbindall
bind "RIGHTALT" "_strafe"
bind "RIGHTCTRL" "_attack"
bind "RIGHTSHIFT" "_speed"
bind "LEFTALT" "_strafe"
bind "LEFTCTRL" "_attack"
bind "LEFTSHIFT" "_speed"
bind "TAB" "_impulse19"
bind "ESCAPE" "togglemenu"
bind "SPACE" "_moveup"
bind "0" "_impulse9"
bind "1" "_impulse0"
bind "2" "_impulse1"
bind "3" "_impulse2"
bind "4" "_impulse3"
bind "5" "_impulse4"
bind "6" "_impulse5"
bind "7" "_impulse6"
bind "8" "_impulse7"
bind "9" "_impulse8"
bind "[" "_impulse14"
bind "]" "_impulse15"
bind "`" "toggleconsole"
bind "a" "_moveleft"
bind "c" "_movedown"
bind "d" "_moveright"
bind "f" "_impulse50"
bind "r" "_impulse13"
bind "s" "_back"
bind "t" "clientmessagemode"
bind "w" "_forward"
bind "y" "clientmessagemode 1"
bind "z" "_ingameStats"
bind "~" "toggleconsole"
bind "F1" "_impulse28"
bind "F2" "_impulse29"
bind "F3" "_impulse17"
bind "F5" "savegame quick"
bind "F6" "_impulse20"
bind "F7" "_impulse22"
bind "F9" "loadgame quick"
bind "F12" "screenshot"
bind "MOUSE1" "_attack"
bind "MOUSE2" "_zoom"
bind "MOUSE3" "_zoom"
bind "MWHEELDOWN" "_impulse14"
bind "MWHEELUP" "_impulse15"
bind "PAUSE" "pause"
bind "UPARROW" "_forward"
bind "DOWNARROW" "_back"
bind "LEFTARROW" "_left"
bind "RIGHTARROW" "_right"
bind "DEL" "_lookdown"
bind "PGDN" "_lookup"
bind "END" "_impulse18"
bind "KP_ENTER" "_impulse21"
bind "KP_INS" "_moveup"
seta bse_rateCost "1.0"
seta bse_rateLimit "1.0"
seta bse_scale "0.66"
seta gui_mediumFontLimit "0.0"
seta gui_smallFontLimit "0.0"
seta win_viewlog_update_count "10"
seta win_viewlog_ypos "0"
seta win_viewlog_xpos "0"
seta net_socksPassword ""
seta net_socksUsername ""
seta net_socksPort "1080"
seta net_socksServer ""
seta net_socksEnabled "0"
seta win_ypos "0"
seta win_xpos "0"
seta r_strictResolutionMatch "1"
seta s_useDeferredSettings "1"
seta s_minStereo "8"
seta s_deviceName ""
seta s_useEAXOcclusion "0"
seta s_useEAXReverb "0"
seta s_useOpenAL "0"
seta s_voiceVolume "1.0"
seta s_voiceLatency "100"
seta s_micInputLevel "6"
seta s_voiceChatEcho "0"
seta s_voiceChatReceive "1"
seta s_voiceChatSend "1"
seta s_radioChatterFraction "0.9"
seta s_speakerFraction "0.65"
seta s_clipVolumes "0"
seta s_numberOfSpeakers "2"
seta s_subFraction "0.5"
seta s_meterTopTime "2000"
seta s_reverse "0"
seta s_mp_maxWindow "0.4"
seta s_mp_minVolume "0.15"
seta s_earSeperationAlgo "0"
seta s_spatializationDecay "2"
seta s_dotbias2 "1.1"
seta s_minVolume2 "0.25"
seta s_dotbias6 "0.8"
seta s_minVolume6 "0"
seta s_maxChannelsMixed "128"
seta s_musicVolume "0.8"
seta s_decompressionLimit "6"
seta s_globalFraction "0.8"
seta s_useOcclusion "1"
seta s_playDefaultSound "1"
seta s_maxSoundsPerShader "0"
seta s_force22kHz "0"
seta s_doorDistanceAdd "150"
seta s_volume "0.25"
seta r_skipSky "0"
seta r_forceAmbient "0"
seta r_debugArrowStep "120"
seta r_debugLineWidth "1"
seta r_debugLineDepthTest "0"
seta r_orderIndexes "1"
seta r_forceLoadImages "1"
seta r_usePortals "1"
seta r_useOptimizedShadows "0"
seta r_shadows "1"
seta r_skipGuiShaders "0"
seta r_portalsDistanceCull "0"
seta r_useShadowCulling "0"
seta r_useShadowProjectedCull "0"
seta r_useLightCulling "0"
seta r_useCulling "0"
seta r_useEntityCulling "0"
seta r_useTurboShadow "0"
seta r_useSMP "0"
seta r_skipDeforms "0"
seta r_skipDiffuse "0"
seta r_skipBump "0"
seta r_skipSpecular "0"
seta r_skipUpdates "0"
seta r_skipInteractions "0"
seta r_skipTranslucent "0"
seta r_skipNewAmbient "0"
seta r_skipPostProcess "0"
seta r_jitter "0"
seta r_renderer "best"
seta r_ignoreHWGamma "1"
seta r_brightness "1.0"
seta r_gamma "1"
seta r_swapInterval "0"
seta r_ignoreGLErrors "0"
seta r_znear "6"
seta r_useInfiniteFarZ "0"
seta r_useStateCaching "1"
seta r_useIndexBuffers "0"
seta r_customHeight "1080"
seta r_customWidth "1920"
seta r_fullscreen "1"
seta r_displayRefresh "60"
seta r_mode "-1"
seta r_aspectRatio "-1"
seta r_alphaToCoverage "1"
seta r_multiSamples "16"
seta r_useLightPortalFlow "1"
seta r_skipMegaTexture "0"
seta image_downSizeLimit "0"
seta image_ignoreHighQuality "0"
seta image_downSizeBumpLimit "0"
seta image_downSizeSpecularLimit "0"
seta image_downSizeBump "0"
seta image_downSizeSpecular "0"
seta image_useCache "0"
seta image_cacheMegs "128"
seta image_cacheMinK "4096"
seta image_usePrecompressedTextures "0"
seta image_useNormalCompressionLoadDDSForPal "0"
seta image_useNormalCompression "0"
seta image_useAllFormats "1"
seta image_useCompression "0"
seta image_preload "1"
seta image_downSize "0"
seta image_lodbias "-1"
seta image_anisotropy "8"
seta image_filter "GL_LINEAR_MIPMAP_LINEAR"
seta g_friendsList ""
seta g_favoritesList ""
seta demo_enforceFS "0"
seta ri_maxViewers "0"
seta net_httpServerPlayerBW "0"
seta net_httpServerGlobalBW "0"
seta net_httpServerPort "0"
seta net_httpProxyMode "1"
seta net_httpProxy ""
seta net_reportUsageStatistics "0"
seta net_clientDownload "1"
seta net_serverAllowServerMod "0"
seta net_spawnRepeater "0"
seta net_LANRepeater "0"
seta net_LANServer "0"
seta net_menuLANServer "0"
seta net_master4 ""
seta net_master3 ""
seta net_master2 ""
seta net_master1 ""
seta net_clientUseroriginTime "100"
seta net_clientUsercmdPacking "2"
seta net_clientPrediction "10"
seta net_clientMaxRate "120000"
seta net_serverMaxClientRate "12000"
seta net_serverMenuDedicated "0"
seta net_clientRepeaterDelay "0"
seta m_strafeSmooth "4"
seta m_smooth "0"
seta m_strafeScale "6.25"
seta m_yaw "0.025"
seta m_pitch "0.025"
seta m_accel "0"
seta sensitivity "2.5"
seta in_joystickLeftStickMove "1"
seta in_toggleZoom "0"
seta in_toggleCrouch "0"
seta in_toggleRun "0"
seta in_alwaysRun "1"
seta in_freeLook "1"
seta in_anglespeedkey "1.5"
seta in_pitchspeed "140"
seta in_yawspeed "140"
seta gui_configServerRate "0"
seta com_lastQuicksave "Quick3"
seta com_skipLevelLoadPause "1"
seta com_guid "NqRQv/Al4Z8"
seta com_fixedTic "1"
seta com_preloadDemos "1"
seta com_compressDemos "0"
seta sv_punkbuster "0"
seta cl_punkbuster "0"
seta com_cpuSpeed "0"
seta com_cpuCount "4"
seta com_systemRam "4096"
seta com_videoRam "2048"
seta com_showFPS "0"
seta com_allowConsole "1"
seta com_purgeAll "0"
seta com_machineSpec "3"
seta sys_lang "english"
seta cm_backFaceCull "0"
seta ui_name "Player"
seta ui_model "model_player_marine"
seta ui_skin "base"
seta si_fragLimit "10"
seta si_timeLimit "0"
seta si_map "game/tram1b"
seta si_gameType "singleplayer"
seta g_showHudPopups "0"
seta r_cgFragmentProfile "best"
seta r_cgVertexProfile "best"
seta g_brassTime "256000"
seta g_decals "1"
seta g_projectileLights "1"
seta si_numPlayers "4"
seta g_announcerDelay "1000"
seta g_mapCycle "mapcycle"
seta g_voteFlags "0"
seta g_gameReviewPause "15"
seta g_password ""
seta g_gunViewStyle "0"
seta g_crosshairCustomFile "gfx/guis/crosshairs/crosshair_blaster.tga"
seta g_crosshairCustom "0"
seta g_crosshairColor "1 1 1 1"
seta g_crosshairSize "32"
seta g_showProjectilePct "0"
seta g_showHud "1"
seta g_fov "90"
seta g_skipFX "0"
seta g_skipParticles "0"
seta g_skipItemShadowsMP "0"
seta g_skipPlayerShadowsMP "0"
seta g_showPlayerShadow "1"
seta pm_vehicleSoundLerpScale "10"
seta pm_vehicleCameraScaleMax "300"
seta pm_vehicleCameraSpeedScale "0.5"
seta pm_vehicleCameraMinDist "300"
seta pm_vehicleCameraSnap "1"
seta g_editEntityTextDistance "256"
seta g_editEntityDistance "512"
seta g_showcamerainfo "0"
seta g_healthTakeLimit "25"
seta g_healthTakeAmt "5"
seta g_healthTakeTime "5"
seta g_useDynamicProtection "1"
seta g_armorProtectionMP "0.66667"
seta g_armorProtection "0.66667"
seta g_nightmare "1"
seta g_doubleVision "1"
seta g_muzzleFlash "1"
seta ui_showGun "1"
seta ui_autoReload "1"
seta ui_autoSwitch "1"
seta ui_hitscanTint "120.0 0.6 1.0"
seta ui_clan ""
seta ui_model_strogg ""
seta ui_model_marine ""
seta ui_team "Marine"
seta si_autobalance "1"
seta si_shuffle "0"
seta si_spectators "1"
seta si_usePass "0"
seta si_warmup "1"
seta si_teamDamage "0"
seta si_allowHitscanTint "2"
seta si_allowVoting "0"
seta si_useReady "0"
seta si_tourneyLimit "3"
seta si_captureLimit "5"
seta si_minPlayers "2"
Config File Variables Part 2
seta si_maxPlayers "8"
seta si_mapCycle ""
seta si_name "Quake 4 Server"
seta g_spectatorChat "0"
seta net_clientLagOMeter "0"
seta si_voiceChat "1"
seta si_serverURL ""
seta net_serverDlTable ""
seta net_serverDlBaseURL ""
seta net_serverDownload "0"
seta si_voteFlags "0"
seta g_simpleItems "0"
seta pm_zoomedSlow "100"
seta g_forceMarineModel "model_player_marine_helmeted_bright"
seta g_forceStroggModel "model_player_tactical_transfer_bright"
seta g_forceModel "model_player_marine_helmeted_bright"
seta si_controlTime "120"
seta si_suddenDeathRestart "1"
seta g_privatePassword ""
seta si_privatePlayers "0"
seta si_dropWeaponsInBuyingModes "0"
seta si_isBuyingEnabled "0"
seta jobs_numThreads "4"
seta r_useRenderThread "1"
seta r_usePreciseTriangleInteractions "1"
Recommended Edits
1. seta com_cpuSpeed "0" this should be set to how fast your CPU is in Hz to find this click on the windows bar on the bottom left and type in dxdiag and click the first prompt you see (should look like a yellow x in a blue bubble. Then finally check on the "system tag" now you should see a box called "system information" in this find the "processor" category and somewhere in it you should see a number and either Hz or GHz type in that number into "seta com_cpuSpeed "0"" where the 0 is.

2. seta jobs_numThreads "4" set this to the number of threads your CPU has. (if you don't know then leave this as is.)

3. seta r_customWidth "1920" & seta r_customHeight "1080" should be set to whatever your monitor's native resolution is for example 1920x1080 is what these values will give you. On windows the best way to find the resolution is to click on the windows search bar on the bottom left of your screen and type "Display Settings" whatever the first option that shows up is click on that (Does not need to match what I typed) Now scroll down till you see a box labeled "Display Resolution" and usually it will show a resolution with a note after it that says "(Recommended)" this means it is your monitor's native resolution and whatever value it has in there should be entered into the values above.

4. seta r_aspectRatio "-1" This should be set only to "-1" as then it will just go by whatever resolution you put in and auto adjust from there, works like a charm.

5. seta r_displayRefresh "60" This value should be set to whatever your monitors refresh rate is for example if it is 120 hz set it to "120", 144hz "144" simple as that.

6. seta TimeScale "1" this value should be never be altered as it controls the speed of everything in the game such as enemies, player speed, physics speed, everything. lower values make the game run in slow motion, can be cool for cinematic shots
Useful Commands you can use in the in game console or by adding it to the config file
1. seta com_showFPS "0" If this is set to one it will show an fps counter on the top right of your
screen
8 Comments
ThatOnePotato 30 May @ 8:44pm 
I also noticed that "seta Timescale" was not present in my file. I found the fix for the super speed issue.

seta r_swapInterval "1":
This setting controls VSync. When set to "0", VSync is off, allowing the game to render frames as fast as your GPU can produce them. This leads to framerates far exceeding your refresh rate and can cause physics and game speed issues. Enable VSync and cap your framerate to your monitor's refresh rate (which is set by seta r_displayRefresh "x")

seta com_fixedTic "1":
This variable is crucial for consistent physics in id Tech 4 games, ensuring the game logic advances at a fixed rate regardless of framerate, but it won't cap your framerate or prevent the "fast-motion" issue if VSync is off.

Hate A.I. all you want but Google Gemini helped me scrape through a lot of these issues so maybe humanity is doomed. But this isn't Doom, Its Quake so we should be good.

Cheers
ThatOnePotato 30 May @ 8:40pm 
Great stuff, however there is some major variance based on what kind of system you are running on. had to do a fair amount of tweaks but got it running pretty dang smooth, only thing i cant seem to get to stop is the flashlight flickering when walking over uneven terrain and the occasional crash, though this could just be chalked up to the age of the game itself. Running this on a 3080 TI graphics card with 64gb ram and AMD Ryzen 9 5950X 16-Core Processor at 4k (3840x2160) with 60hz refresh rate. As a consequence of setting the config file to read only, it makes it so that all control and in game settings that you change will not carry over to the next time you start the game, so i recommend setting the controls, sensitivity, and ui stuff like crosshairs in the config file. Great guide thanks! a little more info would have been helpful but hey I smort so thats fine.
Zeptomonkey  [author] 7 Jan @ 5:18pm 
After a long break I have updated the guide with some more useful information. Enjoy
Zeptomonkey  [author] 4 May, 2024 @ 9:45am 
sorry for the late reply btw
Zeptomonkey  [author] 4 May, 2024 @ 9:44am 
@leis I figured out the reason for the game feeling way too fast, locking your fps to 60 fixes the issue. Its generally an issue with older games since almost all of the physics and how fast time moves was based on what your fps was.
Zeptomonkey  [author] 7 Mar, 2024 @ 6:43pm 
Hmm I’ve not had it be 5x faster, you could try altering the time scale into decimals to try to get it to a good speed, resolution was because my monitor is 2560x1440 sorry about that I will make a note to change that at the end of the guide when I have time, thank you for youre feedback
Leis 7 Mar, 2024 @ 6:36pm 
Hi, I tried this configs, but I found 2 issues. The first one is that it gives an error when launching: "there was an error in your video settings, safe defaults have been selected" (maybe it's because the maximum resolution for my monitor is 1920x1080p, so maybe I should change the values in seta r_customHeight "1440" and seta r_customWidth "2560"), then the second issue is that the game plays like it's 5x faster. I don't understand what could be causing this, I checked the timescale and it is correctly set to "1", yet it's very fast. I thought it was important to let you know. In any case, thank you for the effort you have put into this guide so far.
Zeptomonkey  [author] 27 Feb, 2024 @ 6:09pm 
More is coming when i have time