Skip to content

Creating The Config File

Doink Oink edited this page Sep 11, 2025 · 16 revisions

Creating The Config File

In the _ready() function

  1. Create variable and store the ConfigFile class in it: var _config = ConfigFile.new()
  2. Using FileAccess check to see if the config file exists: if !FileAccess.file_exists(FILE_PATH + "/config.ini"):
  3. Start setting your config values within your config variable: _config.set_value(...)
    • There is a very specific way these values need to be stored. We will go over this shortly
  4. After setting all your values we need to create the folder, using DirAccess, where the config files will be stored: `DirAccess.open("user://").make_dir(FILE_PATH)
  5. Save the config file to the system: `_config.save(FILE_PATH + "/config.ini")

ExampleModConfig.gd

extends Node

const MOD_ID = "ExampleMod"
const FILE_PATH = "user://MCM/ExampleMod"

func _ready():
	var _config = ConfigFile.new()
	if !FileAccess.file_exists(FILE_PATH + "/config.ini"):
		_config.set_value("String", "testString", {
			"name" = "Test String",
			"tooltip" = "A test string",
			"default" = "Hello World",
			"value" = "Hello World"
		})

		_config.set_value("Int", "testInt", {
			"name" = "Test Int",
			"tooltip" = "A test int",
			"default" = 5,
			"value" = 5,
			"minRange" = 0,
			"maxRange" = 20
		})

		_config.set_value("Float", "testFloat", {
			"name" = "Test Float",
			"tooltip" = "A test float",
			"default" = 10.3,
			"value" = 10.3,
			"minRange" = 0,
			"maxRange" = 50.5
		})
		
		_config.set_value("Bool", "testBool", {
			"name" = "Test Bool",
			"tooltip" = "A test bool",
			"default" = false,
			"value" = false
		})
		
		_config.set_value("Keycode", "testKeycode", {
			"name" = "Test Keycode",
			"tooltip" = "A test keycode",
			"default" = KEY_ALT,
			"value" = KEY_ALT
		})
		
		DirAccess.open("user://").make_dir(FILE_PATH)
		_config.save(FILE_PATH + "/config.ini")
	else:
		_config.load(FILE_PATH + "/config.ini")

The available config values

MCM Supports 5 different types of values

  • String
  • Integer
  • Float
  • Boolean
  • Keycodes

Array's of these types are not currently supported.

Instead of just storing a value in a normal variable we create a Dictionary type of structure for every value. This allows MCM to store control variables that is used in for the GUI aspect of the mod and allows the author to set default values to be reset if the player wishes.

The way MCM determines what type a value is is based on the Section that is passed in _config.set_value Take a look at the documentation to see what sections are

Because of this it is VERY important that the sections are written exactly as I have them in the or examples. If they aren't then they will not be displayed in the MCM menu.

  • String
  • Int
  • Float
  • Bool
  • Keycode

Let's go over the different types and how they should be set up.

Clone this wiki locally