From 160f4ff8b6cba555637382ac86bb6bfcf2cb6cf4 Mon Sep 17 00:00:00 2001 From: ZakatTeamI2P Date: Sun, 3 May 2026 17:54:37 +0400 Subject: [PATCH] Fixes for Engine and for scripts --- binding-mri/sunshine-binding.cpp | 1 + scripts/Persistent.rb | 175 +++++++++++++++++++++++++------ scripts/Scene_Title.rb | 8 +- 3 files changed, 150 insertions(+), 34 deletions(-) diff --git a/binding-mri/sunshine-binding.cpp b/binding-mri/sunshine-binding.cpp index 5049071..b471869 100644 --- a/binding-mri/sunshine-binding.cpp +++ b/binding-mri/sunshine-binding.cpp @@ -7,6 +7,7 @@ void SunshineBindingInit(){ rb_const_set(module, rb_intern("SDLVersion_major"), INT2NUM(SDL_MAJOR_VERSION)); rb_const_set(module, rb_intern("SDLVersion_minor"), INT2NUM(SDL_MINOR_VERSION)); rb_const_set(module, rb_intern("SDLVersion_micro"), INT2NUM(SDL_MICRO_VERSION)); + rb_define_method(rb_cObject, "class", rb_obj_class, 0); printf("[SunshineBindingInit] SDL version: %i.%i.%i\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION); printf("[SunshineBindingInit] Done\n"); } diff --git a/scripts/Persistent.rb b/scripts/Persistent.rb index 602cec8..a93e6a0 100644 --- a/scripts/Persistent.rb +++ b/scripts/Persistent.rb @@ -1,18 +1,32 @@ # Persistent data independent from save file. # Stores settings and the like. class LanguageCode - attr_accessor :full - attr_accessor :lang - attr_accessor :region + attr_accessor :full, :lang, :region def initialize(str) + if str.nil? + str = 'en' + end + str = str.to_s + str = str.strip if str.respond_to?(:strip) + if str.length == 0 + str = 'en' + end parts = str.split(/[_-]/) - if parts.size == 1 - @lang, @region = parts.first.downcase.to_sym, nil + if parts.nil? || parts.length == 0 + str = 'en' + parts = str.split(/[_-]/) + end + + if parts.length == 1 + @lang = parts[0].downcase.to_sym + @region = nil @full = @lang - elsif parts.size == 2 - @lang, @region = parts.first.downcase.to_sym, parts.last.upcase.to_sym - @full = (parts.first.downcase + '_' + parts.last.upcase).to_sym + elsif parts.length == 2 + @lang = parts[0].downcase.to_sym + @region = parts[1].upcase.to_sym + full_str = parts[0].downcase + '_' + parts[1].upcase + @full = full_str.to_sym else raise "malformed language code: #{str}" end @@ -23,54 +37,155 @@ class Persistent attr_reader :lang def initialize - self.lang = LanguageCode.new(Steam::LANG || Oneshot::LANG) - if File.exists?("zh_CN.ver") - self.lang = LanguageCode.new("zh_CN") + steam_lang = nil + oneshot_lang = nil + + begin + if defined?(Steam) && defined?(Steam::LANG) + steam_lang = Steam::LANG + end + rescue + steam_lang = nil end - if not Steam.enabled? then - self.lang = LanguageCode.new("en") + + begin + if defined?(Oneshot) && defined?(Oneshot::LANG) + oneshot_lang = Oneshot::LANG + end + rescue + oneshot_lang = nil + end + + lang_code = nil + if steam_lang && steam_lang.to_s.length > 0 + lang_code = steam_lang + elsif oneshot_lang && oneshot_lang.to_s.length > 0 + lang_code = oneshot_lang + else + lang_code = 'en' + end + + begin + self.lang = LanguageCode.new(lang_code) + rescue + # Fallback + self.lang = LanguageCode.new('en') + end + + begin + if File.exist?("zh_CN.ver") + self.lang = LanguageCode.new("zh_CN") + end + rescue + # ignore + end + + begin + if defined?(Steam) && !Steam.enabled? + self.lang = LanguageCode.new("en") + end + rescue + # ignore end end - # Members def lang=(val) - case val - when String - @lang = LanguageCode.new(val) - when LanguageCode + + if val.nil? + @lang = LanguageCode.new('en') + elsif val.is_a?(LanguageCode) @lang = val else - raise 'value passed to Persistent.lang neither String nor LanguageCode' + @lang = LanguageCode.new(val) + end + + begin + if defined?(Language) + Language.set(@lang) + end + rescue => e + print("[Scripts>Persistence] error: " + e.message) end - Language.set(@lang) end def langcode - self.lang.full.to_s + begin + return self.lang.full.to_s + rescue + return 'en' + end end # MARSHAL def marshal_dump [@lang] end + def marshal_load(array) - self.lang = array.first + begin + if array && array.length > 0 && array[0] + self.lang = array[0] + else + self.lang = LanguageCode.new('en') + end + rescue + self.lang = LanguageCode.new('en') + end end - # Save/Load global instance of persistent - FILE_NAME = Oneshot::SAVE_PATH + '/persistent.dat' + FILE_NAME = nil + + def initialize_file_name + begin + if defined?(Oneshot) && defined?(Oneshot::SAVE_PATH) + @@file_name = Oneshot::SAVE_PATH + '/persistent.dat' + else + @@file_name = './persistent.dat' + end + rescue + @@file_name = './persistent.dat' + end + end + def save - File.open(FILE_NAME, 'wb') do |file| - Marshal.dump($persistent, file) + begin + initialize_file_name if @@file_name.nil? + + File.open(@@file_name, 'wb') do |file| + Marshal.dump($persistent, file) + end + rescue => e + print("[Scripts>Persistence>save] Saving error: " + e.message) end end def self.load - if FileTest.exist?(FILE_NAME) - File.open(FILE_NAME, 'rb') do |file| - $persistent = Marshal.load(file) + begin + file_name = nil + + begin + if defined?(Oneshot) && defined?(Oneshot::SAVE_PATH) + file_name = Oneshot::SAVE_PATH + '/persistent.dat' + else + file_name = './persistent.dat' + end + rescue + file_name = './persistent.dat' end - else + + if File.exist?(file_name) + begin + File.open(file_name, 'rb') do |file| + $persistent = Marshal.load(file) + end + rescue + $persistent = Persistent.new + end + else + $persistent = Persistent.new + end + rescue => e + print("[Scripts>Persistence] Error: " + e.message) $persistent = Persistent.new end end diff --git a/scripts/Scene_Title.rb b/scripts/Scene_Title.rb index 7973b5e..55ef0c0 100644 --- a/scripts/Scene_Title.rb +++ b/scripts/Scene_Title.rb @@ -43,7 +43,7 @@ class Scene_Title # chinese has its own special title screen so check for it translation_name = "#{$persistent.langcode}/#{$data_system.title_name}" - if File.exists?("Graphics/Titles/#{translation_name}.png") + if File.exist?("Graphics/Titles/#{translation_name}.png") @sprite.bitmap = RPG::Cache.title(translation_name) else if File.exist?("badend.lock") @@ -87,7 +87,7 @@ class Scene_Title @cursor_pos = 0 # Play title BGM if File.exist?("badend.lock") - #TODO: fix + #TODO: fitx Audio.bgm_play("Audio/BGM/MyBurdenIsDead.ogg", 100, 100) else $game_system.bgm_play($data_system.title_bgm) @@ -98,7 +98,7 @@ class Scene_Title # Execute transition Graphics.transition(40) # Main loop - loop do + while true # Update game screen Graphics.update # Update input information @@ -177,7 +177,7 @@ class Scene_Title if !@window_settings_title.visible # Handle confirmation if Input.trigger?(Input::ACTION) - if File.exist?("badend.lock") + if File.exis?("badend.lock") case @cursor_pos when 0 # Continue EdText.info(tr("Savior not found"))