settings in a separate ruby source file and some code changes, going to rewrite settings menu next

This commit is contained in:
meowtech 2026-05-26 21:00:50 +00:00
parent 1419293295
commit 8c274448cf
6 changed files with 156 additions and 135 deletions

View file

@ -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")

View file

@ -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

View file

@ -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

113
scripts/Settings.rb Normal file
View file

@ -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

View file

@ -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

View file

@ -27,6 +27,9 @@ Game_Oneshot
Game_Follower
Game_FastTravel
# yes.
Settings
Sprite_Character
Sprite_Battler
Sprite_Picture