Quake Live – How to Create Modified Game Types

Quake Live – How to Create Modified Game Types 1 - steamlists.com
Quake Live – How to Create Modified Game Types 1 - steamlists.com

This guide shows you how to make simple gameplay modifications using .factories files.
 
 
This type of modding works both for offline bot play, as well as dedicated servers.
 
 

Intro

By using a bunch of console commands at the same time, you can use built-in engine code to make sweeping gameplay changes to your liking.
 
 
You can enable things such as Quake 4’s Crouch Sliding, Quake 1-styled air control, or do minor damage tweaks with just the use of a text editor.
 
 
This can work in both offline mode, LAN, and Dedicated Servers; just keep in mind the bots won’t adapt to every change!
 
 
 

Developer Console and Console Variables

To create a modified game type, you should have basic knowledge of how console commands work.
 
 
I’m assuming that if you’re looking at this guide you already know about console commands, but if you don’t, here’s a crash course.
 
 

The Developer Console

 
The developer console, or just console, is a hidden menu that allows developers or players to quickly change game settings without navigating through menus or compiling code.
 
 
It can be opened with the tilde key (looks like this – `); it’s the key to the left of the the 1/! key on US Standard Keyboards.
 
 

Console Functions

 
Console Commands: These are actions you can perform on the game, such as quitting “quit” the game.
 
Console Variables: These are tweakable settings that have a value set to them, such as mouse sensitivity “sensitivity 4.0” or gravity “g_gravity 800”.
 
 
Console commands need a backslash “\” in order to work; this can be quickly filled in with tab.
 
 
Some of these commands work on a player’s machine, some only work for server hosts.
 
 

Console shortcuts

 
Tilde ` : Opens/Closes console
 
TAB: Autofills a command with a name and adds a backslash, or if multiple commands
 
Up Arrow/Down Arrow: Cycles though your typed console command history; up being older, down being newer.
 
Left Arrow/Right Arrow: Move the console cursor’s position
 
PageUp/PageDown: Move the console text up and down, respectively
 
CTRL+Home: Top of console text
 
CTRL+End: Bottom of console text
 
 

Quake Live Console Commands

 
A list of all Quake Live console variables can be found at http://www.regurge.at/ql/ – [regurge.at] .
 
 
Additionally, console variables and commands that were changed from the Steam release can be found in Yakumo’s Steam Guide here – [steamcommunity.com] .
 
 
Generally speaking, most console commands are grouped by a prefix at the start. Here’s a nice table of them from the Regurge page above:
 
 

PrefixDescription
bot_Bot settings
cg_Client game settings
cl_Client-side settings
cm_Collision map settings
com_Common settings
fs_Game files settings
g_Server-side game settings
gt_Connection settings
in_General input device settings
joy_Joystick input settings
m_Mouse input settings
net_Network settings
pmove_Player movement server settings
r_Video rendering settings
s_Sound system settings
sv_Server-side settings
sys_System configuration settings
ui_User interface settings
web_Website settings

 
It should be noted that some of these variables won’t change until the player respawns. When in doubt, force yourself to respawn by typing \kill in the console, and the variable may be applied!
 
 
 

Why .factories over .cfg?

While you can use and execute a .cfg file to get similar results, a .factories file won’t overwrite any configurations files you used. This means you won’t have to reset console variables manually when you don’t need them.
 
 
 

Basic FFA Tutorial

Formatting Reference

 
An example of the default factories file that came with your unmodded install can be found here: https://gist.github.com/cstewart90/a1163bad196977e351eb – [github.com] 
 
 
404: If it’s removed, there’s a copy of it at the bottom of this Steam Guide.
 
 
There’s also a copy of it in the game files, but it’s formatted in a less readable layout: “…\steamapps\common\Quake Live\baseq3\pak00.pk3”, Open with > 7zip, and then extract “scripts\factories.txt” from the archive.
 
 

Start of tutorial

 
We’re going to make a Free For All (regular deathmatch) variant that has crouch sliding enabled.
 
 
You will need a modern text editor for this; 7zip can also be useful to both extract game modes and compile game files for Steam Workshop release.
 
 
If you don’t have one installed, Visual Studio Code and Notepad++ are good free choices.
 
 
1. Navigate to your Quake Live directory. Default install path is “C:\Program Files (x86)\Steam\steamapps\common\Quake Live”
 
2. Open the baseq3 folder, and create a folder called scripts.
 
3. Go inside the scripts folder, then Right-click > New > Text Document, and then give it a name and a .factories extension. For example, “testgametype.factories”.
 
4. Right-click the .factories file, then Open With > Your Text Editor.
 
 

Factories File Layout

 
For completionist’s sake, the .factories file format is technically related to the JSON – [wikipedia.org]  file format, but don’t worry about that too much.
 
 
Square brackets – Start and end of the file. Don’t touch these!
 
“cvars” – List all you console variables after the opened curly bracket. Remember to use commas for all lines except the last one listed!
 
author – Your name
 
description – Explain what your gametype does.
 
basegt – The base game type your custom game type is based off. For example, if you want a regular deathmatch, type “ffa”.
 
id –This is what you’ll need to access the game mode through the console. Be sure to make this unique and not used by any other game type, including subscribed workshop items!
 
title – The human name of the game mode.
 
 

Making your factories file

 
5. In your text editor, start by opening and closing square brackets to top and bottom of this file respectively.
 
 

[

]

 
6. Copy the basic FFA gametype and format it so it’s easily readable, and then delete the last comma that’s outside of a curly bracket.
 
 
You need commas to indicate multiple lines or fields; since we’re only making the one game type for this tutorial, you don’t need a final comma to separate multiple game types.
 
 

[
{
 "cvars": {
 "timelimit": "15",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "ffa",
 "title": "Free For All"
}
]

 
7. Add to the list of console variables, remembering to add commas after each line.
 
 
In this case, we want pmove_CrouchSlide to be enabled.
 
 
And just in case your configuration has been modified, we’re adding a couple of related variables in lines to make the crouch sliding values reset to default.
 
 

[
{
 "cvars": {
 "timelimit": "15",
 "g_overtime": "0",
 "pmove_CrouchSlide":"1",
 "pmove_CrouchSlideFriction":"0.5",
 "pmove_CrouchSlideTime":"2000"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "ffa",
 "title": "Free For All"
}
]

 
8. And finally, we’re changing the rest of the variables so it both stands out as a selectable gametype in the menu, and making sure it won’t cause conflicts with other game modes.
 
 

[
{
 "cvars": {
 "timelimit": "15",
 "g_overtime": "0",
 "pmove_CrouchSlide":"1",
 "pmove_CrouchSlideFriction":"0.5",
 "pmove_CrouchSlideTime":"2000"
 },
 "author": "My Name",
 "description": "FFA, but with crouchsliding enabled!",
 "basegt": "ffa",
 "id": "sfa",
 "title": "Slide For All"
}
]

 
9. Test if it works by going to the Main Menu, then Start Match, Game Modes and seeing it’s a selectable mode.
 
 
If you don’t see it, you likely screwed up formatting somewhere. Try and find missing punctuation, and then either type reload_factories in console, or restart the game to see if works again.
 
 
 

Credits and Thanks

Credits

 
CLANG-CLANG – Writer
 
 

Special Thanks

 
Yakumo – His writeups about server management and configuration – [steamcommunity.com]  helped create this guide
 
regurge, TheMuffinMan86, g0vn0r, and Lorfa – Regurge QL Console Guide Original Authors
 
cstewart90 – Formatted factories.txt file (see below)
 
 
 

Extra: Default factories.txt backup (Part 1)

The formatted factories file is taken from here: https://gist.github.com/cstewart90/a1163bad196977e351eb – [github.com] 
 
 
I recommend downloading it directly, rather copy and pasting it from here.
 
 
This is split into 2 sections due to Steam Guide limitations; you need to copy both parts into one file!
 
 

[{
 "cvars": {
 "timelimit": "5",
 "fraglimit": "10",
 "g_overtime": "0",
 "g_training": "1",
 "bot_dynamicSkill": "1",
 "practiceflags": "0",
 "bot_startingSkill": "2",
 "g_allowkill": "0",
 "g_voteFlags": "2048"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "_training",
 "title": "Training"
}, {
 "cvars": {
 "timelimit": "0",
 "g_overtime": "0",
 "g_training": "1",
 "g_infiniteAmmo": "1",
 "practiceflags": "1",
 "g_startingweapons": "17",
 "dmflags": "28",
 "g_voteFlags": "2048"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "_rj",
 "title": "RJ Practice"
}, {
 "cvars": {
 "timelimit": "0",
 "g_overtime": "0",
 "g_training": "1",
 "g_infiniteAmmo": "1",
 "practiceflags": "1",
 "g_startingweapons": "1",
 "dmflags": "28",
 "g_voteFlags": "2048"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "_sj",
 "title": "SJ Practice"
}, {
 "cvars": {
 "g_ammoPack": "1",
 "g_ammoRespawn": "10",
 "g_suddenDeathRespawn": "1",
 "g_startingWeapons": "515",
 "timelimit": "15",
 "g_battleSuitDampen": ".33",
 "g_overtime": "0",
 "g_runes": "1"
 },
 "author": "id Software",
 "description": "Classic CTF with Grapple and Runes.",
 "basegt": "ctf",
 "id": "actf",
 "title": "Arena CTF"
}, {
 "cvars": {
 "g_startingAmmo_sg": "50",
 "g_startingAmmo_mg": "100",
 "g_startingAmmo_lg": "150",
 "g_startingAmmo_hmg": "150",
 "dmflags": "28",
 "g_startingArmor": "100",
 "g_startingHealthBonus": "0",
 "g_startingWeapons": "255",
 "scorelimit": "15",
 "g_startingAmmo_rl": "50",
 "g_startingAmmo_pg": "100",
 "g_startingHealth": "100",
 "g_startingAmmo_rg": "25",
 "g_overtime": "0",
 "g_startingAmmo_gl": "25"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ad",
 "id": "ad",
 "title": "Attack & Defend"
}, {
 "cvars": {
 "g_startingAmmo_sg": "50",
 "g_startingAmmo_mg": "100",
 "g_startingAmmo_lg": "150",
 "g_startingAmmo_hmg": "150",
 "dmflags": "28",
 "g_startingArmor": "100",
 "g_startingHealthBonus": "0",
 "g_startingWeapons": "8447",
 "g_startingAmmo_rl": "50",
 "g_startingAmmo_pg": "100",
 "g_startingHealth": "200",
 "g_allowKill": "0",
 "g_startingAmmo_rg": "25",
 "g_overtime": "0",
 "g_startingAmmo_gl": "25"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ca",
 "id": "ca",
 "title": "Clan Arena"
}, {
 "cvars": {
 "g_ammoPack": "1",
 "g_ammoRespawn": "10",
 "g_suddenDeathRespawn": "1",
 "timelimit": "15",
 "g_battleSuitDampen": ".33",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ctf",
 "id": "ctf",
 "title": "Capture The Flag"
}, {
 "cvars": {
 "g_loadout": "1",
 "g_spawnItemPowerup": "0",
 "g_regenHealth": "1250",
 "g_regenHealthRate": "133",
 "g_regenArmorRate": "133",
 "g_startingHealthBonus": "0",
 "g_startingAmmo_mg": "100",
 "g_spawnItemHealth": "0",
 "g_spawnItemAmmo": "0",
 "g_startingArmor": "100",
 "g_startingWeapons": "1",
 "scorelimit": "150",
 "g_startingAmmo_rl": "50",
 "g_startingAmmo_pg": "100",
 "g_spawnItemHoldable": "0",
 "g_startingAmmo_gl": "25",
 "g_startingAmmo_hmg": "150",
 "g_spawnItemWeapons": "0",
 "g_regenArmor": "1250",
 "g_regenArmorAfterHealth": "1",
 "g_overtime": "0",
 "g_startingAmmo_lg": "150",
 "g_domCapTime": "4",
 "g_startingAmmo_sg": "50",
 "timelimit": "15",
 "g_startingAmmo_rg": "25",
 "g_spawnItemArmor": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "dom",
 "id": "dom",
 "title": "Domination"
}, {
 "cvars": {
 "timelimit": "10",
 "g_itemHeight": "15",
 "g_itemTimers": "0",
 "pmove_BunnyHop": "0",
 "pmove_CrouchStepJump": "0",
 "pmove_JumpTimeDeltaMin": "50",
 "pmove_WaterSwimScale": "0.5f",
 "pmove_WaterWadeScale": "0.75f",
 "fraglimit": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "duel",
 "id": "duel",
 "title": "Duel"
}, {
 "cvars": {
 "g_ammoPack": "1",
 "g_ammoRespawn": "10",
 "g_throwFlagVelocity": "300",
 "g_flagBounce": "0.5",
 "g_flagPhysics": "1",
 "g_suddenDeathRespawn": "1",
 "timelimit": "15",
 "g_battleSuitDampen": ".33",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "oneflag",
 "id": "oneflag",
 "title": "1-Flag CTF"
}, {
 "cvars": {
 "timelimit": "15",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ffa",
 "id": "ffa",
 "title": "Free For All"
}, {
 "cvars": {
 "g_dropCmds": "6",
 "g_loadout": "1",
 "timelimit": "15",
 "fraglimit": "0",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "ft",
 "id": "ft",
 "title": "Freeze Tag"
}, {
 "cvars": {
 "g_ammoPack": "1",
 "g_ammoRespawn": "10",
 "capturelimit": "30",
 "g_suddenDeathRespawn": "1",
 "timelimit": "15",
 "g_battleSuitDampen": ".33",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "har",
 "id": "har",
 "title": "Harvester"
}, {
 "cvars": {
 "g_startingWeapons": "65",
 "capturelimit": "5",
 "g_suddenDeathRespawn": "1",
 "g_instagib": "1",
 "g_dropCmds": "1",
 "timelimit": "15",
 "dmflags": "28",
 "g_allowKill": "0",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Railgun and Gauntlet only. One shot, one kill.",
 "basegt": "ctf",
 "id": "ictf",
 "title": "Instagib CTF"
}, {
 "cvars": {
 "g_dropCmds": "0",
 "dmflags": "28",
 "g_instagib": "1",
 "g_startingWeapons": "65",
 "timelimit": "15",
 "g_allowKill": "0",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Railgun and Gauntlet only. One shot, one kill.",
 "basegt": "ffa",
 "id": "iffa",
 "title": "Instagib FFA"
}, {
 "cvars": {
 "g_dropCmds": "0",
 "g_freezeThawTime": "1000",
 "g_instagib": "1",
 "g_startingWeapons": "65",
 "timelimit": "15",
 "dmflags": "28",
 "g_allowKill": "0",
 "fraglimit": "0",
 "g_overtime": "0"
 },
 "author": "id Software",
 "description": "Railgun and Gauntlet only. One shot, one kill.",
 "basegt": "ft",
 "id": "ift",
 "title": "Instagib Freeze Tag"
}, {

 
 
 

Extra: Default factories.txt backup (Part 2)

Continuing from the above; do not add a space or new paragraph!
 
 

 "cvars": {
 "g_knockback_pg_self": "0",
 "g_startingAmmo_mg": "100",
 "g_enemyLocators": "1",
 "g_startingArmor": "0",
 "g_rrDeathScorePenalty": "0",
 "g_startingAmmo_rl": "50",
 "g_startingAmmo_pg": "100",
 "g_startingHealth": "150",
 "g_startingAmmo_gl": "25",
 "g_teamForceBalance": "0",
 "g_rrInfected": "1",
 "g_startingAmmo_hmg": "150",
 "g_overtime": "0",
 "g_startingAmmo_lg": "150",
 "dmflags": "28",
 "g_startingHealthBonus": "0",
 "g_startingAmmo_sg": "50",
 "g_startingWeapons": "7",
 "g_startingAmmo_rg": "25"
 },
 "author": "id Software",
 "description": "Players who are fragged become infected, and must chase after all remaining players.",
 "basegt": "rr",
 "id": "infected",
 "title": "Infected"
}, {
 "cvars": {
 "g_loadout": "1",
 "g_quadHogIdle": "30",
 "timelimit": "10",
 "fraglimit": "30",
 "g_overtime": "0",
 "g_quadHog": "1"
 },
 "author": "id Software",
 "description": "A Quad Damage spawns in the arena. Pick up the Quad, and it becomes you versus the world.",
 "basegt": "ffa",
 "id": "quadhog",
 "title": "Quad Hog"
}, {
 "cvars": {
 "pmove_noPlayerClip": "1",
 "dmflags": "28",
 "fraglimit": "0",
 "g_startingWeapons": "145",
 "g_allowKill": "1",
 "g_infiniteAmmo": "1",
 "g_knockback_pg": "1.25",
 "g_knockback_rl": "1.10",
 "g_knockback_z": "40",
 "g_itemHeight": "35",
 "g_itemTimers": "0",
 "g_max_knockback": "160",
 "g_overtime": "0",
 "g_respawn_delay_max": "3500",
 "g_respawn_delay_min": "500",
 "g_splashradius_pg": "32",
 "g_startingHealthBonus": "0",
 "g_velocity_gl": "800",
 "pmove_AirControl": "1",
 "pmove_JumpTimeDeltaMin": "50",
 "pmove_RampJump": "1",
 "pmove_WeaponRaiseTime": "10",
 "pmove_WeaponDropTime": "10",
 "timelimit": "8"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "race",
 "id": "race",
 "title": "Race"
}, {
 "cvars": {
 "g_teamForceBalance": "0",
 "g_startingAmmo_sg": "50",
 "g_startingAmmo_mg": "100",
 "g_startingAmmo_lg": "150",
 "g_startingAmmo_hmg": "150",
 "dmflags": "28",
 "g_startingArmor": "100",
 "g_startingHealthBonus": "0",
 "g_startingWeapons": "8447",
 "g_startingAmmo_rl": "50",
 "g_startingAmmo_pg": "100",
 "g_startingHealth": "100",
 "g_startingAmmo_rg": "25",
 "g_overtime": "0",
 "g_startingAmmo_gl": "25"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "rr",
 "id": "rr",
 "title": "Red Rover"
}, {
 "cvars": {
 "g_loadout": "1",
 "g_dropCmds": "4",
 "timelimit": "15",
 "fraglimit": "150"
 },
 "author": "id Software",
 "description": "Default gametype settings.",
 "basegt": "tdm",
 "id": "tdm",
 "title": "Team Deathmatch"
}, {
 "cvars": {
 "dmflags": "60",
 "g_startingWeapons": "8447",
 "g_allowKill": "0",
 "g_overtime": "0",
 "g_knockback_pg": "1.25",
 "g_knockback_rl": "1.10",
 "g_knockback_z": "40",
 "g_max_knockback": "160",
 "g_respawn_delay_max": "3500",
 "g_respawn_delay_min": "500",
 "g_splashradius_pg": "32",
 "g_startingHealthBonus": "0",
 "g_velocity_gl": "800",
 "pmove_AirControl": "1",
 "pmove_JumpTimeDeltaMin": "50",
 "pmove_RampJump": "1",
 "pmove_WeaponRaiseTime": "10",
 "pmove_WeaponDropTime": "10",
 "weapon_reload_rg": "1250",
 "weapon_reload_sg": "950",
 "g_vampiricDamage": "0.75",
 "g_infiniteAmmo": "1",
 "g_startingArmor": "0",
 "g_startingHealth": "300",
 "g_forceDmgThroughSurface": "1"
 },
 "basegt": "ca",
 "id": "vca",
 "title": "Vampiric CA",
 "author": "id Software",
 "description": "The popular Clan Arena modification with Turbo Physics and Vampiric Damage."
}]

 
 
 

Extra: Workshop Gametypes

I’m listing anything I find interesting here.
 
 

More Gametypes

 
Covers most of the Quake-like game types you probably wanted to recreate! https://steamcommunity.com/sharedfiles/filedetails/?id=538941289 – [steamcommunity.com] 
 
 

QuakeCon 2015 Settings

 
A historical reference for the settings that were used in, you guessed it, QC 2015. https://steamcommunity.com/sharedfiles/filedetails/?id=539419816 – [steamcommunity.com] 
 
 

Written by CLANG-CLANG

 
 
I hope you enjoy the Guide we share about Quake Live – How to Create Modified Game Types; if you think we forget to add or we should add more information, please let us know via commenting below! See you soon!
 
 


Be the first to comment

Leave a Reply

Your email address will not be published.


*