From 8c274448cfebe4856ff3cecafee95d6da072251a Mon Sep 17 00:00:00 2001 From: meowtech Date: Tue, 26 May 2026 21:00:50 +0000 Subject: [PATCH] settings in a separate ruby source file and some code changes, going to rewrite settings menu next --- scripts/CMakeLists.txt | 4 +- scripts/Scene_Map.rb | 2 +- scripts/Scene_Title.rb | 57 ++++++++++--------- scripts/Settings.rb | 113 +++++++++++++++++++++++++++++++++++++ scripts/Window_Settings.rb | 112 +++--------------------------------- scripts/_scripts.txt | 3 + 6 files changed, 156 insertions(+), 135 deletions(-) create mode 100644 scripts/Settings.rb diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 0eedb29..7b390a6 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -106,7 +106,9 @@ set(scripts Window_Target.rb i18n_English.rb i18n_Japanese.rb - i18n_Language.rb) + i18n_Language.rb + + Settings.rb) find_program(RUBY_EXE ruby DOC "Location of the Ruby executable") diff --git a/scripts/Scene_Map.rb b/scripts/Scene_Map.rb index 7d2af93..5d567eb 100644 --- a/scripts/Scene_Map.rb +++ b/scripts/Scene_Map.rb @@ -123,7 +123,7 @@ class Scene_Map EdText.info(tr("You cannot perform this action during cutscenes.")) return else - if Window_Settings.OneShotMode == true + if Settings[:oneshot_mode] == true File.new("badend.lock", "w") $game_temp.common_event_id = 35 else diff --git a/scripts/Scene_Title.rb b/scripts/Scene_Title.rb index 955fcef..afffce7 100644 --- a/scripts/Scene_Title.rb +++ b/scripts/Scene_Title.rb @@ -9,36 +9,33 @@ class Scene_Title MENU_Y = Graphics.height - 100 SDLVer = "#{Sunshine::SDLVersion_major}.#{Sunshine::SDLVersion_minor}.#{Sunshine::SDLVersion_micro}" SunshineVer = "0.1-dev" + #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Load database $data_actors = load_data("Data/Actors.rxdata") - #$data_classes = load_data("Data/Classes.rxdata") - #$data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") - #$data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") - #$data_enemies = load_data("Data/Enemies.rxdata") - #$data_troops = load_data("Data/Troops.rxdata") - #$data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") + Language.initialize_database - # Load save game/initialize data + $game_temp = Game_Temp.new - new_game #unless load - # Make system object + new_game $game_system = Game_System.new + Settings.load! # loading settings + load_perma_flags - Window_Settings.load_settings Oneshot.allow_exit true @window_settings_title = Window_Settings.new + # Make title graphic @sprite = Sprite.new @@ -61,15 +58,13 @@ class Scene_Title end end end - # check for debug file to add debug items - if Window_Settings.DebugIsEnabled - # debug save - $game_party.gain_item(54, 1) - # plight skip - $game_party.gain_item(82, 1) - #George reroler - $game_party.gain_item(81, 1) - end + + # check for debug file to add debug items + if Settings[:debug] + $game_party.gain_item(54, 1) # debug save + $game_party.gain_item(82, 1) # plight skip + $game_party.gain_item(81, 1) #George reroler + end @sprite.zoom_x = 2.0 @sprite.zoom_y = 2.0 @@ -80,14 +75,18 @@ class Scene_Title @menu.bitmap.draw_text(MENU_X, MENU_Y, 150, 24, tr("Start")) @menu.bitmap.draw_text(MENU_X, MENU_Y + 25, 150, 24, tr("Settings")) @menu.bitmap.draw_text(MENU_X, MENU_Y + 50, 150, 24, tr("Exit")) - #Debug info like in minecraft Forge :P + + #Debug info like in minecraft Forge :P @menu.bitmap.draw_text(5, 5, 150, 20, tr("Ruby #{RUBY_VERSION}")) @menu.bitmap.draw_text(5, 25, 150, 20, tr("SDL #{SDLVer}")) @menu.bitmap.draw_text(5, 45, 150, 20, tr("Sunshine #{SunshineVer}")) - if $game_switches[160] && $game_switches[152] - @menu.bitmap.draw_text(MENU_X, MENU_Y + 75, 150, 24, tr("...")) - end - Language.register_text_sprite(self.class.name + "_contents", @menu.bitmap) + + if $game_switches[160] && $game_switches[152] + @menu.bitmap.draw_text(MENU_X, MENU_Y + 75, 150, 24, tr("...")) + end + + Language.register_text_sprite(self.class.name + "_contents", @menu.bitmap) + # Make cursor graphic @cursor = Sprite.new @cursor.zoom_x = @cursor.zoom_y = 2 @@ -96,8 +95,10 @@ class Scene_Title @cursor.bitmap = RPG::Cache.menu('cursor') @cursor.x = MENU_X - 12 @cursor.y = MENU_Y + (22 - @cursor.bitmap.height) / 2 + # Initialize cursor position @cursor_pos = 0 + # Play title BGM if File.exist?("badend.lock") #TODO: fix audio values @@ -108,6 +109,7 @@ class Scene_Title # Stop playing ME and BGS Audio.me_stop Audio.bgs_stop + # Execute transition Graphics.transition(40) # Main loop @@ -118,7 +120,7 @@ class Scene_Title Input.update # Frame update update - @window_settings_title.update + @window_settings_title.update # Abort loop if screen is changed if $scene != self break @@ -133,7 +135,7 @@ class Scene_Title @menu.dispose @cursor.bitmap.dispose @cursor.dispose - @window_settings_title.dispose + @window_settings_title.dispose Audio.bgm_fade(60) Graphics.transition(60) # Run automatic change for BGM and BGS set with map @@ -233,7 +235,6 @@ class Scene_Title $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new - #$game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new $game_followers = [] @@ -257,7 +258,7 @@ class Scene_Title # Play decision SE Audio.se_play('Audio/SE/title_decision.wav') # Update map (run parallel process event) - Oneshot.allow_exit false + Oneshot.allow_exit false $game_map.update # Switch to map screen $scene = Scene_Map.new diff --git a/scripts/Settings.rb b/scripts/Settings.rb new file mode 100644 index 0000000..fe1caa2 --- /dev/null +++ b/scripts/Settings.rb @@ -0,0 +1,113 @@ +module Settings + FILE_PATH = [Oneshot::SAVE_PATH, 'settings.sunshine.dat'].join '/' + + class << self + + def reset! + @data = { + :debug => false, + :oneshot_mode => false + } + end + + def [](k) + @data[k] + end + + def []=(k, v) + if @data[k] == false or @data[k] == true + if not (v == false or v == true) + return + end + elsif @data[k] == NilClass + return + elsif @data[k].class != v.class + return + end + + @data[k] = v; + end + + def load! + Settings::Legacy.load! + Settings.reset! + + if FileTest.exist?(Settings::FILE_PATH) + File.open(Settings::FILE_PATH, "r") do |f| + settings = Marshal.load(f) rescue return + if settings.class == Hash + settings.each do |key, value| + Settings[key] = value; + end + end + end + end + + Settings.save! + end + + def save! + Settings::Legacy.save! + + if @data + File.write(Settings::FILE_PATH, Marshal.dump(@data)) + end + end + + end + + module Legacy + FILE_PATH = [Oneshot::SAVE_PATH, 'settings.conf'].join '/' + + def self.load! + if not FileTest.exist?(Settings::Legacy::FILE_PATH) + Settings::Legacy.save! + return + end + + File.foreach(Settings::Legacy::FILE_PATH) do |line| + if not line.include? "=" + next + end + + key, value = line.strip.split("=", 2) + puts ([key, value].join '=') + case key + when "bgm_volume" + Audio.bgm_volume = value.to_i + when "sfx_volume" + Audio.sfx_volume = value.to_i + when "fullscreen" + Graphics.fullscreen = (value.casecmp "true") == 0 + when "default_run" + $game_switches[251] = (value.casecmp "true") == 0 + when "colorblind_mode" + $game_switches[252] = (value.casecmp "true") == 0 + when "automash_enabled" + $game_switches[253] = (value.casecmp "true") == 0 + when "frameskip" + Graphics.frameskip = (value.casecmp "true") == 0 + when "in_game_timer" + $game_temp.igt_timer_visible = (value.casecmp "true") == 0 + $scene.in_game_timer.visible = $game_temp.igt_timer_visible if $scene.is_a?(Scene_Map) + end + end + end + + def self.save! + $persistent.save + File.open(Settings::Legacy::FILE_PATH, 'w') do |f| + f.puts (["bgm_volume", Audio.bgm_volume].join '=') + f.puts (["sfx_volume", Audio.sfx_volume].join '=') + f.puts (["fullscreen", Graphics.fullscreen].join '=') + f.puts (["default_run", ($game_switches[251])].join '=') + f.puts (["colorblind_mode", ($game_switches[252])].join '=') + f.puts (["automash_enabled", ($game_switches[253])].join '=') + f.puts (["frameskip", Graphics.frameskip].join '=') + f.puts (["in_game_timer", $game_temp.igt_timer_visible].join '=') + end + end + + end + +end \ No newline at end of file diff --git a/scripts/Window_Settings.rb b/scripts/Window_Settings.rb index b715914..d9308ff 100644 --- a/scripts/Window_Settings.rb +++ b/scripts/Window_Settings.rb @@ -5,105 +5,7 @@ class Window_Settings ITEM_SPACING = 20 VALUE_MARGIN = 270 ACTIVE_MARGIN = MARGIN * 2 + 20 - SETTINGS_FILE_NAME = Oneshot::SAVE_PATH + '/settings.conf' - class << self - attr_accessor :DebugIsEnabled - attr_accessor :OneShotMode - def OneShotMode? - !!@OneShotMode - end - def DebugIsEnabled? - !!@DebugIsEnabled - end - end - @DebugIsEnabled = false - #You have only ONE shot! - @OneShotMode = false - def save_settings - $persistent.save - File.open(SETTINGS_FILE_NAME, 'w') do |file| - file.puts('bgm_volume=' + Audio.bgm_volume.to_s) - file.puts('sfx_volume=' + Audio.sfx_volume.to_s) - file.puts('fullscreen=' + Graphics.fullscreen.to_s) - file.puts('default_run=' + $game_switches[251].to_s) - file.puts('colorblind_mode=' + $game_switches[252].to_s) - file.puts('automash_enabled=' + $game_switches[253].to_s) - file.puts('frameskip=' + Graphics.frameskip.to_s) - file.puts('in_game_timer=' + $game_temp.igt_timer_visible.to_s) - file.puts('debug=' + Window_Settings.DebugIsEnabled.to_s) - file.puts('oneshotmode=' + Window_Settings.OneShotMode.to_s) - end - end - def self.load_settings - return false if !FileTest.exist?(SETTINGS_FILE_NAME) - File.foreach(SETTINGS_FILE_NAME).with_index do |line, line_num| - if !line.include? "=" - next - end - vals = line.strip.split("=") - case vals[0] - when "bgm_volume" - if !!(vals[1] =~ /\A[-+]?[0-9]+\z/) #is a number - number = vals[1].to_i - Audio.bgm_volume = number - end - when "sfx_volume" - if !!(vals[1] =~ /\A[-+]?[0-9]+\z/) #is a number - number = vals[1].to_i - Audio.sfx_volume = number - end - when "fullscreen" - if vals[1] == "true" - Graphics.fullscreen = true - $console = true - elsif vals[1] == "false" - Graphics.fullscreen = false - $console = false - end - when "default_run" - if vals[1] == "true" - $game_switches[251] = true - elsif vals[1] == "false" - $game_switches[251] = false - end - when "colorblind_mode" - if vals[1] == "true" - $game_switches[252] = true - elsif vals[1] == "false" - $game_switches[252] = false - end - when "automash_enabled" - if vals[1] == "true" - $game_switches[253] = true - elsif vals[1] == "false" - $game_switches[253] = false - end - when "in_game_timer" - timer_enabled = vals[1] == "true" - $game_temp.igt_timer_visible = timer_enabled - $scene.in_game_timer.visible = timer_enabled if $scene.is_a?(Scene_Map) - when "frameskip" - if vals[1] == "true" - Graphics.frameskip = true - elsif vals[1] == "false" - Graphics.frameskip = false - end - when "debug" - if vals[1] == "true" - Window_Settings.DebugIsEnabled = true - elsif vals[1] == "false" - Window_Settings.DebugIsEnabled = false - end - when "oneshotmode" - if vals[1] == "true" - Window_Settings.OneShotMode = true - elsif vals[1] == "false" - Window_Settings.OneShotMode = false - end - end - end - end def initialize @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) @bg = Sprite.new(@viewport) @@ -243,13 +145,13 @@ class Window_Settings l = Language::LANGUAGES[@lang_index] rescue Language::LANGUAGES[0] spr.bitmap.draw_text(VALUE_MARGIN, 0, spr.bitmap.width, spr.bitmap.height, tr(l)) when 10 - if(Window_Settings.DebugIsEnabled == true) + if(Settings[:debug] == true) spr.bitmap.draw_text(VALUE_MARGIN, 0, spr.bitmap.width, spr.bitmap.height, tr("ON")) else spr.bitmap.draw_text(VALUE_MARGIN, 0, spr.bitmap.width, spr.bitmap.height, tr("OFF")) end when 11 - if(Window_Settings.OneShotMode == true) + if(Settings[:oneshot_mode] == true) spr.bitmap.draw_text(VALUE_MARGIN, 0, spr.bitmap.width, spr.bitmap.height, tr("ON")) else spr.bitmap.draw_text(VALUE_MARGIN, 0, spr.bitmap.width, spr.bitmap.height, tr("OFF")) @@ -509,13 +411,13 @@ class Window_Settings when 10 if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) $game_system.se_play($data_system.decision_se) - Window_Settings.DebugIsEnabled = !Window_Settings.DebugIsEnabled + Settings[:debug] = !Settings[:debug] redraw_all_settings() end when 11 if Input.trigger?(Input::ACTION) || Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) $game_system.se_play($data_system.decision_se) - Window_Settings.OneShotMode = !Window_Settings.OneShotMode + Settings[:oneshot_mode] = !Settings[:oneshot_mode] redraw_all_settings() end end @@ -523,7 +425,8 @@ class Window_Settings if Input.trigger?(Input::CANCEL) $game_system.se_play($data_system.cancel_se) @fade_out = true - save_settings + + Settings.save! end end @@ -543,5 +446,4 @@ class Window_Settings def opacity @bg.opacity end -end - +end \ No newline at end of file diff --git a/scripts/_scripts.txt b/scripts/_scripts.txt index fba22c5..4800dec 100644 --- a/scripts/_scripts.txt +++ b/scripts/_scripts.txt @@ -27,6 +27,9 @@ Game_Oneshot Game_Follower Game_FastTravel +# yes. +Settings + Sprite_Character Sprite_Battler Sprite_Picture