Files
Super-Mario-Bros.-Remastere…/Scripts/Classes/Singletons/SettingsManager.gd
2025-10-01 12:33:34 +01:00

126 lines
2.7 KiB
GDScript

extends Node
var file := {
"video": {
"mode": 0,
"size": 0,
"vsync": 1,
"drop_shadows": 1,
"scaling": 0,
"visuals": 0,
"hud_size": 0,
"frame_limit" : 0,
},
"audio": {
"master": 10.0,
"music": 10.0,
"sfx": 10.0,
"athletic_bgm": 1,
"extra_bgm": 1,
"skid_sfx": 1,
"extra_sfx": 0,
"menu_bgm": 0
},
"game": {
"campaign": "SMB1",
"lang": "en",
"character": "0000"
},
"keyboard":
{
"jump": "Z",
"run": "X",
"action": "X",
"move_left": "Left",
"move_right": "Right",
"move_up": "Up",
"move_down": "Down",
"ui_accept": "Z",
"ui_back": "X",
"pause": "Escape"
},
"controller":
{
"jump": [0, 1],
"run": [2, 3],
"action": [2, 3],
"move_left": "0,-1",
"move_right": "0,1",
"move_up": "1,-1",
"move_down": "1,1",
"ui_accept": 0,
"ui_back": 1,
"pause": 6
},
"visuals":
{
"parallax_style": 2,
"resource_packs": [Global.ROM_PACK_NAME],
"modern_hud": 0,
"rainbow_style": 0,
"extra_bgs": 1,
"bg_particles": 1,
"transform_style": 0,
"athletic_bgm": 1,
"skid_sfx": 1,
"text_shadows": 1,
"bridge_animation": 0,
"visible_timers": 0,
"transition_animation": 0,
"colour_pipes": 1,
"firebar_style": 0,
"extra_particles": 0
},
"difficulty":
{
"damage_style": 1,
"checkpoint_style": 0,
"inf_lives": 0,
"flagpole_lives": 0,
"game_over_behaviour": 0,
"level_design": 0,
"extra_checkpoints": 0,
"back_scroll": 0,
"time_limit": 1,
"lakitu_style": 0
}
}
static var SETTINGS_DIR := Global.config_path.path_join("settings.cfg")
func _enter_tree() -> void:
DirAccess.make_dir_absolute(Global.config_path.path_join("resource_packs"))
load_settings()
await get_tree().physics_frame
apply_settings()
TranslationServer.set_locale(Settings.file.game.lang)
func save_settings() -> void:
var cfg_file = ConfigFile.new()
for section in file.keys():
for key in file[section].keys():
cfg_file.set_value(section, key, file[section][key])
cfg_file.set_value("game", "seen_disclaimer", true)
cfg_file.set_value("game", "campaign", Global.current_campaign)
cfg_file.save(SETTINGS_DIR)
func load_settings() -> void:
if FileAccess.file_exists(SETTINGS_DIR) == false:
save_settings()
var cfg_file = ConfigFile.new()
cfg_file.load(SETTINGS_DIR)
for section in cfg_file.get_sections():
for key in cfg_file.get_section_keys(section):
file[section][key] = cfg_file.get_value(section, key)
func apply_settings() -> void:
for i in file.video.keys():
$Apply/Video.set_value(i, file.video[i])
for i in file.audio.keys():
$Apply/Audio.set_value(i, file.audio[i])
if Settings.file.game.has("characters"):
var idx := 0
for i in Settings.file.game.characters:
Global.player_characters[idx] = int(i)
idx += 1