bool GameStateConfigBase::parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
	// @CLASS GameStateConfigBase|Description of menus/config.txt

	if (infile.key == "listbox_scrollbar_offset") {
		// @ATTR listbox_scrollbar_offset|integer|Horizontal offset from the right of listboxes (mods, languages, etc) to place the scrollbar.
		activemods_lstb->scrollbar_offset = x1;
		inactivemods_lstb->scrollbar_offset = x1;
		language_lstb->scrollbar_offset = x1;
	}
	else if (infile.key == "music_volume") {
		// @ATTR music_volume|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Music Volume" slider relative to the frame.
		placeLabeledWidget(music_volume_lb, music_volume_sl, x1, y1, x2, y2, msg->get("Music Volume"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "sound_volume") {
		// @ATTR sound_volume|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Sound Volume" slider relative to the frame.
		placeLabeledWidget(sound_volume_lb, sound_volume_sl, x1, y1, x2, y2, msg->get("Sound Volume"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "language") {
		// @ATTR language|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Language" list box relative to the frame.
		placeLabeledWidget(language_lb, language_lstb, x1, y1, x2, y2, msg->get("Language"));
	}
	else if (infile.key == "combat_text") {
		// @ATTR combat_text|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Show combat text" checkbox relative to the frame.
		placeLabeledWidget(combat_text_lb, combat_text_cb, x1, y1, x2, y2, msg->get("Show combat text"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "show_fps") {
		// @ATTR show_fps|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Show FPS" checkbox relative to the frame.
		placeLabeledWidget(show_fps_lb, show_fps_cb, x1, y1, x2, y2, msg->get("Show FPS"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "show_hotkeys") {
		// @ATTR show_hotkeys|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Show Hotkey Labels" checkbox relative to the frame.
		placeLabeledWidget(show_hotkeys_lb, show_hotkeys_cb, x1, y1, x2, y2, msg->get("Show Hotkeys Labels"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "colorblind") {
		// @ATTR colorblind|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Colorblind Mode" checkbox relative to the frame.
		placeLabeledWidget(colorblind_lb, colorblind_cb, x1, y1, x2, y2, msg->get("Colorblind Mode"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "hardware_cursor") {
		// @ATTR hardware_cursor|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Hardware mouse cursor" checkbox relative to the frame.
		placeLabeledWidget(hardware_cursor_lb, hardware_cursor_cb, x1, y1, x2, y2, msg->get("Hardware mouse cursor"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "dev_mode") {
		// @ATTR dev_mode|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Developer Mode" checkbox relative to the frame.
		placeLabeledWidget(dev_mode_lb, dev_mode_cb, x1, y1, x2, y2, msg->get("Developer Mode"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "show_target") {
		// @ATTR show_target|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Show targeting animation" checkbox relative to the frame.
		placeLabeledWidget(show_target_lb, show_target_cb, x1, y1, x2, y2, msg->get("Show targeting animation"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "loot_tooltips") {
		// @ATTR loot_tooltips|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Always show loot labels" checkbox relative to the frame.
		placeLabeledWidget(loot_tooltips_lb, loot_tooltips_cb, x1, y1, x2, y2, msg->get("Always show loot labels"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "activemods") {
		// @ATTR activemods|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Active Mods" list box relative to the frame.
		placeLabeledWidget(activemods_lb, activemods_lstb, x1, y1, x2, y2, msg->get("Active Mods"));
	}
	else if (infile.key == "inactivemods") {
		// @ATTR inactivemods|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Available Mods" list box relative to the frame.
		placeLabeledWidget(inactivemods_lb, inactivemods_lstb, x1, y1, x2, y2, msg->get("Available Mods"));
	}
	else if (infile.key == "activemods_shiftup") {
		// @ATTR activemods_shiftup|x (integer), y (integer)|Position of the button to shift mods up in "Active Mods" relative to the frame.
		activemods_shiftup_btn->setBasePos(x1, y1);
		activemods_shiftup_btn->refresh();
	}
	else if (infile.key == "activemods_shiftdown") {
		// @ATTR activemods_shiftdown|x (integer), y (integer)|Position of the button to shift mods down in "Active Mods" relative to the frame.
		activemods_shiftdown_btn->setBasePos(x1, y1);
		activemods_shiftdown_btn->refresh();
	}
	else if (infile.key == "activemods_deactivate") {
		// @ATTR activemods_deactivate|x (integer), y (integer)|Position of the "Disable" button relative to the frame.
		activemods_deactivate_btn->label = msg->get("<< Disable");
		activemods_deactivate_btn->setBasePos(x1, y1);
		activemods_deactivate_btn->refresh();
	}
	else if (infile.key == "inactivemods_activate") {
		// @ATTR inactivemods_activate|x (integer), y (integer)|Position of the "Enable" button relative to the frame.
		inactivemods_activate_btn->label = msg->get("Enable >>");
		inactivemods_activate_btn->setBasePos(x1, y1);
		inactivemods_activate_btn->refresh();
	}
	else {
		return false;
	}

	return true;
}
bool GameStateConfigBase::parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
	if (infile.key == "listbox_scrollbar_offset") {
		// @ATTR listbox_scrollbar_offset|int|Horizontal offset from the right of listboxes (mods, languages, etc) to place the scrollbar.
		activemods_lstb->scrollbar_offset = x1;
		inactivemods_lstb->scrollbar_offset = x1;
		language_lstb->scrollbar_offset = x1;
	}
	else if (infile.key == "music_volume") {
		// @ATTR music_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Music Volume" slider relative to the frame.
		placeLabeledWidget(music_volume_lb, music_volume_sl, x1, y1, x2, y2, msg->get("Music Volume"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "sound_volume") {
		// @ATTR sound_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Sound Volume" slider relative to the frame.
		placeLabeledWidget(sound_volume_lb, sound_volume_sl, x1, y1, x2, y2, msg->get("Sound Volume"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "language") {
		// @ATTR language|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Language" list box relative to the frame.
		placeLabeledWidget(language_lb, language_lstb, x1, y1, x2, y2, msg->get("Language"));
		language_lb->setJustify(JUSTIFY_CENTER);
	}
	else if (infile.key == "combat_text") {
		// @ATTR combat_text|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Show combat text" checkbox relative to the frame.
		placeLabeledWidget(combat_text_lb, combat_text_cb, x1, y1, x2, y2, msg->get("Show combat text"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "show_fps") {
		// @ATTR show_fps|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Show FPS" checkbox relative to the frame.
		placeLabeledWidget(show_fps_lb, show_fps_cb, x1, y1, x2, y2, msg->get("Show FPS"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "colorblind") {
		// @ATTR colorblind|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Colorblind Mode" checkbox relative to the frame.
		placeLabeledWidget(colorblind_lb, colorblind_cb, x1, y1, x2, y2, msg->get("Colorblind Mode"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "hardware_cursor") {
		// @ATTR hardware_cursor|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Hardware mouse cursor" checkbox relative to the frame.
		placeLabeledWidget(hardware_cursor_lb, hardware_cursor_cb, x1, y1, x2, y2, msg->get("Hardware mouse cursor"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "dev_mode") {
		// @ATTR dev_mode|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Developer Mode" checkbox relative to the frame.
		placeLabeledWidget(dev_mode_lb, dev_mode_cb, x1, y1, x2, y2, msg->get("Developer Mode"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "loot_tooltips") {
		// @ATTR loot_tooltips|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Always show loot labels" checkbox relative to the frame.
		placeLabeledWidget(loot_tooltips_lb, loot_tooltips_cb, x1, y1, x2, y2, msg->get("Always show loot labels"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "statbar_labels") {
		// @ATTR statbar_labels|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Always show stat bar labels" checkbox relative to the frame.
		placeLabeledWidget(statbar_labels_lb, statbar_labels_cb, x1, y1, x2, y2, msg->get("Always show stat bar labels"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "auto_equip") {
		// @ATTR auto_equip|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Automatically equip items" checkbox relative to the frame.
		placeLabeledWidget(auto_equip_lb, auto_equip_cb, x1, y1, x2, y2, msg->get("Automatically equip items"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "subtitles") {
		// @ATTR subtitles|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Subtitles" checkbox relative to the frame.
		placeLabeledWidget(subtitles_lb, subtitles_cb, x1, y1, x2, y2, msg->get("Subtitles"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "activemods") {
		// @ATTR activemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Active Mods" list box relative to the frame.
		placeLabeledWidget(activemods_lb, activemods_lstb, x1, y1, x2, y2, msg->get("Active Mods"));
		activemods_lb->setJustify(JUSTIFY_CENTER);
	}
	else if (infile.key == "inactivemods") {
		// @ATTR inactivemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Available Mods" list box relative to the frame.
		placeLabeledWidget(inactivemods_lb, inactivemods_lstb, x1, y1, x2, y2, msg->get("Available Mods"));
		inactivemods_lb->setJustify(JUSTIFY_CENTER);
	}
	else if (infile.key == "activemods_shiftup") {
		// @ATTR activemods_shiftup|point|Position of the button to shift mods up in "Active Mods" relative to the frame.
		activemods_shiftup_btn->setBasePos(x1, y1);
		activemods_shiftup_btn->refresh();
	}
	else if (infile.key == "activemods_shiftdown") {
		// @ATTR activemods_shiftdown|point|Position of the button to shift mods down in "Active Mods" relative to the frame.
		activemods_shiftdown_btn->setBasePos(x1, y1);
		activemods_shiftdown_btn->refresh();
	}
	else if (infile.key == "activemods_deactivate") {
		// @ATTR activemods_deactivate|point|Position of the "Disable" button relative to the frame.
		activemods_deactivate_btn->label = msg->get("<< Disable");
		activemods_deactivate_btn->setBasePos(x1, y1);
		activemods_deactivate_btn->refresh();
	}
	else if (infile.key == "inactivemods_activate") {
		// @ATTR inactivemods_activate|point|Position of the "Enable" button relative to the frame.
		inactivemods_activate_btn->label = msg->get("Enable >>");
		inactivemods_activate_btn->setBasePos(x1, y1);
		inactivemods_activate_btn->refresh();
	}
	else {
		return false;
	}

	return true;
}
bool GameStateConfigDesktop::parseKeyDesktop(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
	// @CLASS GameStateConfigDesktop|Description of menus/config.txt

	int keybind_num = -1;

	if (infile.key == "listbox_scrollbar_offset") {
		// overrides same key in GameStateConfigBase
		joystick_device_lstb->scrollbar_offset = x1;
		activemods_lstb->scrollbar_offset = x1;
		inactivemods_lstb->scrollbar_offset = x1;
		language_lstb->scrollbar_offset = x1;
	}
	else if (infile.key == "fullscreen") {
		// @ATTR fullscreen|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Full Screen Mode" checkbox relative to the frame.
		placeLabeledWidget(fullscreen_lb, fullscreen_cb, x1, y1, x2, y2, msg->get("Full Screen Mode"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "mouse_move") {
		// @ATTR mouse_move|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Move hero using mouse" checkbox relative to the frame.
		placeLabeledWidget(mouse_move_lb, mouse_move_cb, x1, y1, x2, y2, msg->get("Move hero using mouse"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "hwsurface") {
		// @ATTR hwsurface|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Hardware surfaces" checkbox relative to the frame.
		placeLabeledWidget(hwsurface_lb, hwsurface_cb, x1, y1, x2, y2, msg->get("Hardware surfaces"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "vsync") {
		// @ATTR vsync|label x (integer), label y (integer), x (integer), y (integer)|Position of the "V-Sync" checkbox relative to the frame.
		placeLabeledWidget(vsync_lb, vsync_cb, x1, y1, x2, y2, msg->get("V-Sync"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "texture_filter") {
		// @ATTR texture_filter|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Texture Filtering" checkbox relative to the frame.
		placeLabeledWidget(texture_filter_lb, texture_filter_cb, x1, y1, x2, y2, msg->get("Texture Filtering"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "change_gamma") {
		// @ATTR change_gamma|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Allow changing gamma" checkbox relative to the frame.
		placeLabeledWidget(change_gamma_lb, change_gamma_cb, x1, y1, x2, y2, msg->get("Allow changing gamma"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "gamma") {
		// @ATTR gamma|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Gamma" slider relative to the frame.
		placeLabeledWidget(gamma_lb, gamma_sl, x1, y1, x2, y2, msg->get("Gamma"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "hws_note") {
		// @ATTR hws_note|x (integer), y (integer)|Position of the "Disable for performance" label (next to Hardware surfaces) relative to the frame.
		hws_note_lb->setBasePos(x1, y1);
		hws_note_lb->set(msg->get("Disable for performance"));
	}
	else if (infile.key == "dbuf_note") {
		// @ATTR dbuf_note|x (integer), y (integer)|Position of the "Disable for performance" label (next to Double buffering) relative to the frame.
		dbuf_note_lb->setBasePos(x1, y1);
		dbuf_note_lb->set(msg->get("Disable for performance"));
	}
	else if (infile.key == "test_note") {
		// @ATTR test_note|x (integer), y (integer)|Position of the "Experimental" label relative to the frame.
		test_note_lb->setBasePos(x1, y1);
		test_note_lb->set(msg->get("Experimental"));
	}
	else if (infile.key == "enable_joystick") {
		// @ATTR enable_joystick|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Use joystick" checkbox relative to the frame.
		placeLabeledWidget(enable_joystick_lb, enable_joystick_cb, x1, y1, x2, y2, msg->get("Use joystick"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "joystick_device") {
		// @ATTR joystick_device|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Joystick" list box relative to the frame.
		placeLabeledWidget(joystick_device_lb, joystick_device_lstb, x1, y1, x2, y2, msg->get("Joystick"));

		for(int i = 0; i < SDL_NumJoysticks(); i++) {
			std::string joystick_name = inpt->getJoystickName(i);
			if (joystick_name != "")
				joystick_device_lstb->append(joystick_name, joystick_name);
		}
	}
	else if (infile.key == "mouse_aim") {
		// @ATTR mouse_aim|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Mouse aim" checkbox relative to the frame.
		placeLabeledWidget(mouse_aim_lb, mouse_aim_cb, x1, y1, x2, y2, msg->get("Mouse aim"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "no_mouse") {
		// @ATTR no_mouse|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Do not use mouse" checkbox relative to the frame.
		placeLabeledWidget(no_mouse_lb, no_mouse_cb, x1, y1, x2, y2, msg->get("Do not use mouse"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "joystick_deadzone") {
		// @ATTR joystick_deadzone|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Joystick Deadzone" slider relative to the frame.
		placeLabeledWidget(joystick_deadzone_lb, joystick_deadzone_sl, x1, y1, x2, y2, msg->get("Joystick Deadzone"), JUSTIFY_RIGHT);
	}
	else if (infile.key == "handheld_note") {
		// @ATTR handheld_note|x (integer), y (integer)|Position of the "For handheld devices" label relative to the frame.
		handheld_note_lb->setBasePos(x1, y1);
		handheld_note_lb->set(msg->get("For handheld devices"));
	}
	else if (infile.key == "secondary_offset") {
		// @ATTR secondary_offset|x (integer), y (integer)|Offset of the second (and third) columns of keybinds.
		secondary_offset.x = x1;
		secondary_offset.y = y1;
	}
	else if (infile.key == "keybinds_bg_color") {
		// @ATTR keybinds_bg_color|r (integer), g (integer), b (integer)|Background color for the keybindings scrollbox.
		scrollpane_color.r = x1;
		scrollpane_color.g = y1;
		scrollpane_color.b = x2;
	}
	else if (infile.key == "scrollpane") {
		// @ATTR scrollpane|x (integer), y (integer), w (integer), h (integer)|Position of the keybinding scrollbox relative to the frame.
		scrollpane.x = x1;
		scrollpane.y = y1;
		scrollpane.w = x2;
		scrollpane.h = y2;
	}
	else if (infile.key == "scrollpane_contents") {
		// @ATTR scrollpane_contents|integer|The vertical size of the keybinding scrollbox's contents.
		scrollpane_contents = x1;
	}

	// @ATTR cancel|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Cancel" keybind relative to the keybinding scrollbox.
	else if (infile.key == "cancel") keybind_num = CANCEL;
	// @ATTR accept|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Accept" keybind relative to the keybinding scrollbox.
	else if (infile.key == "accept") keybind_num = ACCEPT;
	// @ATTR up|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Up" keybind relative to the keybinding scrollbox.
	else if (infile.key == "up") keybind_num = UP;
	// @ATTR down|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Down" keybind relative to the keybinding scrollbox.
	else if (infile.key == "down") keybind_num = DOWN;
	// @ATTR left|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Left" keybind relative to the keybinding scrollbox.
	else if (infile.key == "left") keybind_num = LEFT;
	// @ATTR right|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Right" keybind relative to the keybinding scrollbox.
	else if (infile.key == "right") keybind_num = RIGHT;
	// @ATTR bar1|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar1" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar1") keybind_num = BAR_1;
	// @ATTR bar2|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar2" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar2") keybind_num = BAR_2;
	// @ATTR bar3|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar3" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar3") keybind_num = BAR_3;
	// @ATTR bar4|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar4" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar4") keybind_num = BAR_4;
	// @ATTR bar5|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar5" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar5") keybind_num = BAR_5;
	// @ATTR bar6|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar6" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar6") keybind_num = BAR_6;
	// @ATTR bar7|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar7" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar7") keybind_num = BAR_7;
	// @ATTR Bar8|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar8" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar8") keybind_num = BAR_8;
	// @ATTR bar9|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar9" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar9") keybind_num = BAR_9;
	// @ATTR bar0|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Bar0" keybind relative to the keybinding scrollbox.
	else if (infile.key == "bar0") keybind_num = BAR_0;
	// @ATTR main1|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Main1" keybind relative to the keybinding scrollbox.
	else if (infile.key == "main1") keybind_num = MAIN1;
	// @ATTR main2|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Main2" keybind relative to the keybinding scrollbox.
	else if (infile.key == "main2") keybind_num = MAIN2;
	// @ATTR character|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Character" keybind relative to the keybinding scrollbox.
	else if (infile.key == "character") keybind_num = CHARACTER;
	// @ATTR inventory|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Inventory" keybind relative to the keybinding scrollbox.
	else if (infile.key == "inventory") keybind_num = INVENTORY;
	// @ATTR powers|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Powers" keybind relative to the keybinding scrollbox.
	else if (infile.key == "powers") keybind_num = POWERS;
	// @ATTR log|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Log" keybind relative to the keybinding scrollbox.
	else if (infile.key == "log") keybind_num = LOG;
	// @ATTR ctrl|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Ctrl" keybind relative to the keybinding scrollbox.
	else if (infile.key == "ctrl") keybind_num = CTRL;
	// @ATTR shift|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Shift" keybind relative to the keybinding scrollbox.
	else if (infile.key == "shift") keybind_num = SHIFT;
	// @ATTR alt|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Alt" keybind relative to the keybinding scrollbox.
	else if (infile.key == "alt") keybind_num = ALT;
	// @ATTR delete|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Delete" keybind relative to the keybinding scrollbox.
	else if (infile.key == "delete") keybind_num = DEL;
	// @ATTR actionbar|label x (integer), label y (integer), x (integer), y (integer)|Position of the "ActionBar Accept" keybind relative to the keybinding scrollbox.
	else if (infile.key == "actionbar") keybind_num = ACTIONBAR;
	// @ATTR actionbar_back|label x (integer), label y (integer), x (integer), y (integer)|Position of the "ActionBar Left" keybind relative to the keybinding scrollbox.
	else if (infile.key == "actionbar_back") keybind_num = ACTIONBAR_BACK;
	// @ATTR actionbar_forward|label x (integer), label y (integer), x (integer), y (integer)|Position of the "ActionBar Right" keybind relative to the keybinding scrollbox.
	else if (infile.key == "actionbar_forward") keybind_num = ACTIONBAR_FORWARD;
	// @ATTR actionbar_use|label x (integer), label y (integer), x (integer), y (integer)|Position of the "ActionBar Use" keybind relative to the keybinding scrollbox.
	else if (infile.key == "actionbar_use") keybind_num = ACTIONBAR_USE;
	// @ATTR developer_menu|label x (integer), label y (integer), x (integer), y (integer)|Position of the "Developer Menu" keybind relative to the keybinding scrollbox.
	else if (infile.key == "developer_menu") keybind_num = DEVELOPER_MENU;

	else return false;

	if (keybind_num > -1 && (unsigned)keybind_num < keybinds_lb.size() && (unsigned)keybind_num < keybinds_btn.size()) {
		//keybindings
		keybinds_lb[keybind_num]->setX(x1);
		keybinds_lb[keybind_num]->setY(y1);
		keybinds_btn[keybind_num]->pos.x = x2;
		keybinds_btn[keybind_num]->pos.y = y2;
	}

	return true;
}