chocolate-heretic.cfg(5)
π« NAME β¨
okay so bestie, say hi to chocolate-heretic.cfg β the Chocolate Heretic configuration file, and the manual page for it is chocolate-heretic.cfg(5) in case you were wondering which page you're on π. It's a whole vibe and we're about to read every single line of it together, no skimming, no cap.
πΈ DESCRIPTION πΈ
So chocolate-heretic.cfg is a config file for chocolate-heretic(6), but here's the tea: it's an auxiliary config file. The main config options live in heretic.cfg, which holds all the same options as Vanilla Heretic (because compatibility is that girl). chocolate-heretic.cfg is only for the options that are specific to Chocolate-Heretic itself. It's giving "side character with main character energy," fr fr.
Normally it chills in your home directory at ~/.local/share/chocolate-heretic/chocolate-heretic.cfg. π If you wanna move it, you can override that path with the XDG_DATA_HOME environment variable (check the XDG Base Directory Specification, iykyk).
And if editing config files by hand isn't your moment, the chocolate-heretic-setup(6) tool is a cute little front-end for editing chocolate-heretic.cfg. π
π¦ FILE FORMAT π¦
The file format is literally the same one used for heretic.cfg(5). Same format, different file, slay. β¨
π CONFIGURATION VARIABLES π
okay this is the main event, the whole runway, every single variable, let's go π
video_driverβ the name of the SDL video driver to use. If it's an empty string, you just get the default video driver. No thoughts, head empty, default it is.window_positionβ where the window sits on your screen when you're running in windowed mode. Accepted values are:""(empty string) β don't care,"center"β put the window in the center of the screen,"x,y"β put it at those exact coordinates. Pick your fighter. π―fullscreenβ if it's non-zero, the game runs in full screen mode. If it's zero, you get a window. That's it, that's the whole thing.video_displayβ the index of the display the game should run on. Heads up bestie: this does nothing if you're running in windowed mode (fullscreen=0) andwindow_positionisn't set to"center". π₯οΈaspect_ratio_correctβ if non-zero, the screen gets stretched vertically so it displays correctly on a square pixel video mode.smooth_pixel_scalingβ if non-zero, the screen gets smooth scaling. Soft and pretty β¨integer_scalingβ if non-zero, it forces integer scales for resolution-independent rendering. Whole numbers only, no in-between.window_widthβ the window width when you're running in windowed mode.window_heightβ the window height when you're running in windowed mode.fullscreen_widthβ the width for screen mode when running fullscreen. If this andfullscreen_heightare both set to zero, it runs fullscreen as a desktop window covering the entire screen, instead of ever switching screen modes. Usually you don't even need to touch this value. Like, at all.fullscreen_heightβ the height for screen mode when running fullscreen. Go read whatfullscreen_widthsays, it's the same energy. π―force_software_rendererβ if non-zero, it forces the use of a software renderer. Made for systems that are lacking hardware acceleration. We've all been there.max_scaling_buffer_pixelsβ the max number of pixels to use for the intermediate scaling buffer. More pixels means the screen renders more precisely, but the quality gains start diminishing (diminishing returns, the classic π). The default limits it to 16,000,000 pixels, which is enough to cover 4K monitor standards. Iconic amount of pixels honestly.startup_delayβ number of milliseconds to wait on startup after the video mode has been set, before the game starts. This gives the screen time to settle on monitors that don't display an image for a brief interval after changing video modes. Patience is a virtue πgraphical_startupβ if non-zero, display the graphical startup screen.show_endoomβ if non-zero, the ENDOOM text screen is displayed when you exit the game. If zero, the ENDOOM screen does not appear. Bye bye ENDOOM πpng_screenshotsβ if non-zero, screenshots get saved in PNG format. If zero, they're saved in PCX format, just like Vanilla Doom does. Retro moment.snd_samplerateβ sound output sample rate, in Hz. Typical values to use are11025,22050,44100and48000.snd_cachesizeβ the maximum number of bytes to allocate for caching converted sound effects in memory. If set to zero, there's no limit applied. Unlimited memory, we love to see it (carefully).snd_maxslicetime_msβ the maximum size of the output sound buffer size in milliseconds. Sound output is generated periodically in slices. Higher values might be more efficient, but they introduce latency to the sound output. The default is 28ms β that's one slice per tic with the 35fps timer, if you're keeping score. β±οΈsnd_pitchshiftβ if non-zero, sound effects get their pitch varied up or down by a random amount during play. If zero, sound effects play back at their default pitch. Chaotic or calm, your call. π΅snd_musiccmdβ external command to invoke for MIDI playback. If it's set to the empty string, SDL_mixer's internal MIDI playback is used instead. This only does anything whensnd_musicdeviceis set to General MIDI output. πsnd_dmxoptionβ the value to set for theDMXOPTIONenvironment variable. If this contains"-opl3", output for an OPL3 chip is generated when in OPL MIDI playback mode.opl_io_portβ the I/O port used to access the OPL chip. Only relevant when you're using native OPL music playback.use_libsamplerateβ controls whether libsamplerate support is used for doing sample rate conversions of sound effects. This support has to be compiled into the program to work, no cap. If zero, libsamplerate support is disabled. If non-zero, libsamplerate is enabled. Increasing values roughly correspond to higher quality conversion, and the higher the quality, the slower the conversion process β trade-off queen. The levels are: Linear conversion = 1; Zero order hold = 2; Fast Sinc filter = 3; Medium quality Sinc filter = 4; High quality Sinc filter = 5. πlibsamplerate_scaleβ the scaling factor used by libsamplerate. It's used when converting sounds internally back into integer form; normally you shouldn't need to change it from the default value. The one time it might be needed is if a PWAD file is loaded that contains very loud sounds, because then the conversion may cause sound clipping and the scale factor should be reduced. The lower the value, the quieter the sound effects become, so set it as high as possible without clipping happening. Loud and clear but not too loud π₯autoload_pathβ full path to a directory where WAD files and dehacked patches can be placed so they're automatically loaded on startup. A subdirectory of this directory matching the IWAD name is checked to find the files to load. πmusic_pack_pathβ full path to a directory containing configuration files for substitute music packs. These packs contain high quality renderings of game music, played instead of using the system's built-in MIDI playback. Upgrade your soundtrack, bestie πΆfsynth_chorus_activeβ if1, activate the FluidSynth chorus effects module. If0, no chorus is added to the output signal.fsynth_chorus_depthβ specifies the modulation depth of the FluidSynth chorus. Default is 5.0, range is 0.0 to 256.0.fsynth_chorus_levelβ specifies the output amplitude of the FluidSynth chorus signal. Default is 0.35, range is 0.0 to 10.0.fsynth_chorus_nrβ sets the voice count of the FluidSynth chorus signal. Default is 3, range is 0 to 99.fsynth_chorus_speedβ sets the FluidSynth chorus modulation speed in Hz. Default is 0.3, range is 0.1 to 5.0.fsynth_midibankselectβ defines how FluidSynth interprets Bank Select messages. The default is"gs". Other possible values are"gm","xg"and"mma". Choose your bank, diva πfsynth_polyphonyβ sets the number of FluidSynth voices that can be played in parallel. Default is 256, range is 1 - 65535.fsynth_reverb_activeβ if1, activate the FluidSynth reverb effects module. If0, no reverb is added to the output signal. Reverb or silence, pick one π³οΈfsynth_reverb_dampβ sets the amount of FluidSynth reverb damping. Default is 0.4, range is 0.0 to 1.0.fsynth_reverb_levelβ sets the FluidSynth reverb amplitude. Default is 0.15, range is 0.0 - 1.0.fsynth_reverb_roomsizeβ sets the room size (i.e. amount of wet) FluidSynth reverb. Default is 0.6, range is 0.0 - 1.0. Big room energy ποΈfsynth_reverb_widthβ sets the stereo spread of the FluidSynth reverb signal. Default is 0.4, range is 0.0 - 100.0.fsynth_gainβ fine tune the FluidSynth output level. Default is 1.0, range is 0.0 - 10.0.fsynth_sf_pathβ full path to a soundfont file to use with FluidSynth MIDI playback.timidity_cfg_pathβ full path to a Timidity configuration file to use for MIDI playback. The file gets evaluated from the directory where it is evaluated, so there's no need to add"dir"commands into it. Convenient, honestly β¨gus_patch_pathβ path to GUS patch files to use when operating in GUS emulation mode.gus_ram_kbβ number of kilobytes of RAM to use in GUS emulation mode. Valid values are 256, 512, 768 or 1024.winmm_midi_deviceβ MIDI device for native Windows MIDI. πͺwinmm_complevelβ compatibility level for native Windows MIDI, default 0. Valid values are 0 (Vanilla), 1 (Standard), 2 (Full).winmm_reset_typeβ reset device type for native Windows MIDI, default 1. Valid values are 0 (None), 1 (GM Mode), 2 (GS Mode), 3 (XG Mode).winmm_reset_delayβ reset device delay for native Windows MIDI, default 0, median value 100 ms.vanilla_keyboard_mappingβ if non-zero, the game behaves like Vanilla Doom and always assumes an American keyboard mapping. If this has a value of zero, the native keyboard mapping of the keyboard is used. πΊπΈplayer_nameβ the name to use in network games for identification. This is only used on the"waiting"screen while waiting for the game to start. Make it cute, everyone sees it.grabmouseβ if this is non-zero, the mouse gets"grabbed"when running in windowed mode so it can be used as an input device. When running full screen, this has no effect. πnovertβ if non-zero, all vertical mouse movement is ignored. This emulates the behavior of the"novert"tool available under DOS that performs the same function. Old school solution, new school setting πmouse_accelerationβ mouse acceleration factor. When the speed of mouse movement exceeds the threshold value (mouse_threshold), the speed is multiplied by this value. Zoom zoom π
...and bestie, we're not even done yet, there's more coming in the next part, stay with me π
mouse_thresholdβ the mouse acceleration threshold, bestie. once your mouse movement speed goes over this value, the speed gets multiplied by an acceleration factor (that'smouse_acceleration, if you were wondering).mouseb_strafeleftβ mouse button that strafes left.mouseb_straferightβ mouse button that strafes right.mouseb_turnleftβ mouse button that turns left.mouseb_turnrightβ mouse button that turns right.mouseb_useβ mouse button that "uses" an object, eg. a door or switch.mouseb_backwardβ mouse button that moves you backwards.mouseb_prevweaponβ mouse button that cycles to the previous weapon.mouseb_nextweaponβ mouse button that cycles to the next weapon.mouseb_invleftβ mouse button that moves to the left in the inventory.mouseb_invrightβ mouse button that moves to the right in the inventory.mouseb_useartifactβ mouse button that uses an artifact.dclick_useβ if it's non-zero, double-clicking a mouse button acts exactly like pressing the "use" key to use an object in-game, eg. a door or switch. one double-click, zero thoughts.
joystick_guidβ an SDL GUID string saying which joystick to use. an empty string means no joystick is configured at all, so like, don't be surprised when nothing responds. πjoystick_indexβ the index of the SDL joystick to use. this one only matters when you've got multiple identical joystick devices connected that share the same GUID, and you need to tell them apart.use_analogβ if it's non-zero, use analog movement when you're playing with a gamepad.joystick_x_axisβ the joystick axis used for horizontal (X) movement.joystick_x_invertβ if it's non-zero, movement on the horizontal joystick axis is inverted.joystick_turn_sensitivityβ joystick turn analog sensitivity, given as a value between 0 and 20.joystick_y_axisβ the joystick axis used for vertical (Y) movement.joystick_y_invertβ if it's non-zero, movement on the vertical joystick axis is inverted.joystick_strafe_axisβ the joystick axis used for strafing movement.joystick_strafe_invertβ if it's non-zero, movement on the joystick axis used for strafing is inverted.joystick_move_sensitivityβ joystick move and strafe analog sensitivity, given as a value between 0 and 20.joystick_look_axisβ the joystick axis used for looking up and down.joystick_look_invertβ if it's non-zero, movement on the joystick axis used for looking is inverted.joystick_look_sensitivityβ joystick look analog sensitivity, given as a value between 0 and 20.joystick_physical_button0β the physical joystick button that corresponds to joystick virtual button #0.joystick_physical_button1β the physical joystick button that corresponds to joystick virtual button #1.joystick_physical_button2β the physical joystick button that corresponds to joystick virtual button #2.joystick_physical_button3β the physical joystick button that corresponds to joystick virtual button #3.joystick_physical_button4β the physical joystick button that corresponds to joystick virtual button #4.joystick_physical_button5β the physical joystick button that corresponds to joystick virtual button #5.joystick_physical_button6β the physical joystick button that corresponds to joystick virtual button #6.joystick_physical_button7β the physical joystick button that corresponds to joystick virtual button #7.joystick_physical_button8β the physical joystick button that corresponds to joystick virtual button #8.joystick_physical_button9β the physical joystick button that corresponds to joystick virtual button #9.joystick_physical_button10β the physical joystick button that corresponds to joystick virtual button #10.joystick_physical_button11β the physical joystick button that corresponds to joystick virtual button #11.joystick_physical_button12β the physical joystick button that corresponds to joystick virtual button #12.joystick_physical_button13β the physical joystick button that corresponds to joystick virtual button #13.joystick_physical_button14β the physical joystick button that corresponds to joystick virtual button #14.joystick_physical_button15β the physical joystick button that corresponds to joystick virtual button #15.joystick_physical_button16β the physical joystick button that corresponds to joystick virtual button #16.use_gamepadβ if it's non-zero, use theSDL_GameControllerinterface instead of theSDL_Joystickinterface. glow up fr.gamepad_typeβ stores theSDL_GameControllerTypeof the last configured gamepad.joystick_x_dead_zoneβ joystick x axis dead zone, given as a percentage of the axis max value.joystick_y_dead_zoneβ joystick y axis dead zone, given as a percentage of the axis max value.joystick_strafe_dead_zoneβ joystick strafe axis dead zone, given as a percentage of the axis max value.joystick_look_dead_zoneβ joystick look axis dead zone, given as a percentage of the axis max value.joyb_strafeleftβ joystick virtual button that makes the player strafe left.joyb_straferightβ joystick virtual button that makes the player strafe right.joyb_menu_activateβ joystick virtual button that activates the menu.joyb_toggle_automapβ joystick virtual button that toggles the automap.joyb_prevweaponβ joystick virtual button that cycles to the previous weapon.joyb_nextweaponβ joystick virtual button that cycles to the next weapon.joyb_useartifactβ joystick virtual button that activates an artifact.joyb_invleftβ joystick virtual button that moves left in the inventory.joyb_invrightβ joystick virtual button that moves right in the inventory.joyb_flyupβ joystick virtual button that flies up.joyb_flydownβ joystick virtual button that flies down.joyb_flycenterβ joystick virtual button that centers flying.
okay now we're into keyboard territory, and it's giving very detailed π
key_pauseβ key that pauses or unpauses the game.key_menu_activateβ key that activates the menu when pressed.key_menu_upβ key that moves the cursor up on the menu.key_menu_downβ key that moves the cursor down on the menu.key_menu_leftβ key that moves the currently selected slider on the menu left.key_menu_rightβ key that moves the currently selected slider on the menu right.key_menu_backβ key that goes back to the previous menu.key_menu_forwardβ key that activates the currently selected menu item.key_menu_confirmβ key that answers 'yes' to a question in the menu.key_menu_abortβ key that answers 'no' to a question in the menu.key_menu_helpβ keyboard shortcut that brings up the help screen.key_menu_saveβ keyboard shortcut that brings up the save game menu.key_menu_loadβ keyboard shortcut that brings up the load game menu.key_menu_volumeβ keyboard shortcut that brings up the sound volume menu.key_menu_detailβ keyboard shortcut that toggles the detail level.key_menu_qsaveβ keyboard shortcut that quicksaves the current game.key_menu_endgameβ keyboard shortcut that ends the game.key_menu_messagesβ keyboard shortcut that toggles heads-up messages.key_menu_qloadβ keyboard shortcut that loads the last quicksave.key_menu_quitβ keyboard shortcut that quits the game.key_menu_gammaβ keyboard shortcut that toggles the gamma correction level.key_spyβ keyboard shortcut that switches view in multiplayer.key_menu_incscreenβ keyboard shortcut that increases the screen size.key_menu_decscreenβ keyboard shortcut that decreases the screen size.key_menu_screenshotβ keyboard shortcut that saves a screenshot. πΈ do it for the lore.
map time, bestie. cartography era πΊοΈ
key_map_toggleβ key that toggles the map view.key_map_northβ key that pans north when you're in the map view.key_map_southβ key that pans south when you're in the map view.key_map_eastβ key that pans east when you're in the map view.key_map_westβ key that pans west when you're in the map view.key_map_zoominβ key that zooms in when you're in the map view.key_map_zoomoutβ key that zooms out when you're in the map view.key_map_maxzoomβ key that zooms out the maximum amount when you're in the map view.key_map_followβ key that toggles follow mode when you're in the map view.key_map_gridβ key that toggles the grid display when you're in the map view.key_map_markβ key that sets a mark when you're in the map view.key_map_clearmarkβ key that clears all marks when you're in the map view.
weapons, in order, no skipping π₯
key_weapon1β key that selects weapon 1.key_weapon2β key that selects weapon 2.key_weapon3β key that selects weapon 3.key_weapon4β key that selects weapon 4.key_weapon5β key that selects weapon 5.key_weapon6β key that selects weapon 6.key_weapon7β key that selects weapon 7.key_weapon8β key that selects weapon 8.key_prevweaponβ key that cycles to the previous weapon.key_nextweaponβ key that cycles to the next weapon.
artifacts, aka the β¨ special little guys β¨
key_arti_quartzβ key that uses the "quartz flask" artifact.key_arti_urnβ key that uses the "mystic urn" artifact.key_arti_bombβ key that uses the "timebomb of the ancients" artifact.key_arti_tomeβ key that uses the "tome of power" artifact.key_arti_ringβ key that uses the "ring of invincibility" artifact.key_arti_chaosdeviceβ key that uses the "chaos device" artifact.key_arti_shadowsphereβ key that uses the "shadowsphere" artifact.key_arti_wingsβ key that uses the "wings of wrath" artifact.key_arti_torchβ key that uses the "torch" artifact.key_arti_morphβ key that uses the "morph ovum" artifact.
and the last little batch, we love a finale π¦
key_message_refreshβ key that re-displays the last message.key_demo_quitβ key that quits the game when you're recording a demo.key_multi_msgβ key that sends a message during multiplayer games.key_multi_msgplayer1β key that sends a message to player 1 during multiplayer games.key_multi_msgplayer2β the key that fires off a message to player 2 mid-multiplayer-game. squad communication bestie, use it π¬key_multi_msgplayer3β same energy, but it's messaging player 3. yes you need a whole separate key. no they did not bundle them. it's giving thorough πkey_multi_msgplayer4β and this one pings player 4 during multiplayer games. four players, four keys, four chances to say "gg" π
π SEE ALSO π
okay so if you wanna go deeper (and you should, bestie, the lore is immaculate):
chocolate-heretic(6)β the main game itself πheretic.cfg(5)β the OG config page, for when you want the original flavor πchocolate-heretic-setup(6)β the setup tool, aka where you go when you're too scared to hand-edit this file (no judgement, we've all been there) π
that's the whole page, bestie!! you made it to the end, which honestly is giving main character energy π
this lil masterpiece lives under Chocolate Doom 3.1.1, dated 2024-01-23, and it's the chocolate-heretic.cfg(5) man page. go forth and configure, you gorgeous nerd π¦β¨π
π¦ where this page comes from
- fedora 43: chocolate-doom 3.1.1-1.fc43 Β· GPL-2.0-or-later
- fedora 44: chocolate-doom 3.1.1-1.fc44 Β· GPL-2.0-or-later
- nixpkgs unstable: chocolate-doom 3.1.1
- ubuntu resolute: chocolate-doom 3.1.1-1 Β· GPL-2.0-or-later
- ubuntu stonking: chocolate-doom 3.1.1-1 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms