Fixes for Engine and for scripts

This commit is contained in:
ZakatTeamI2P 2026-05-03 17:54:37 +04:00
parent c0306a0042
commit 160f4ff8b6
3 changed files with 150 additions and 34 deletions

View file

@ -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_major"), INT2NUM(SDL_MAJOR_VERSION));
rb_const_set(module, rb_intern("SDLVersion_minor"), INT2NUM(SDL_MINOR_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_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] SDL version: %i.%i.%i\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION);
printf("[SunshineBindingInit] Done\n"); printf("[SunshineBindingInit] Done\n");
} }

View file

@ -1,18 +1,32 @@
# Persistent data independent from save file. # Persistent data independent from save file.
# Stores settings and the like. # Stores settings and the like.
class LanguageCode class LanguageCode
attr_accessor :full attr_accessor :full, :lang, :region
attr_accessor :lang
attr_accessor :region
def initialize(str) 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(/[_-]/) parts = str.split(/[_-]/)
if parts.size == 1 if parts.nil? || parts.length == 0
@lang, @region = parts.first.downcase.to_sym, nil str = 'en'
parts = str.split(/[_-]/)
end
if parts.length == 1
@lang = parts[0].downcase.to_sym
@region = nil
@full = @lang @full = @lang
elsif parts.size == 2 elsif parts.length == 2
@lang, @region = parts.first.downcase.to_sym, parts.last.upcase.to_sym @lang = parts[0].downcase.to_sym
@full = (parts.first.downcase + '_' + parts.last.upcase).to_sym @region = parts[1].upcase.to_sym
full_str = parts[0].downcase + '_' + parts[1].upcase
@full = full_str.to_sym
else else
raise "malformed language code: #{str}" raise "malformed language code: #{str}"
end end
@ -23,54 +37,155 @@ class Persistent
attr_reader :lang attr_reader :lang
def initialize def initialize
self.lang = LanguageCode.new(Steam::LANG || Oneshot::LANG) steam_lang = nil
if File.exists?("zh_CN.ver") oneshot_lang = nil
self.lang = LanguageCode.new("zh_CN")
begin
if defined?(Steam) && defined?(Steam::LANG)
steam_lang = Steam::LANG
end
rescue
steam_lang = nil
end 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
end end
# Members
def lang=(val) def lang=(val)
case val
when String if val.nil?
@lang = LanguageCode.new(val) @lang = LanguageCode.new('en')
when LanguageCode elsif val.is_a?(LanguageCode)
@lang = val @lang = val
else 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 end
Language.set(@lang)
end end
def langcode def langcode
self.lang.full.to_s begin
return self.lang.full.to_s
rescue
return 'en'
end
end end
# MARSHAL # MARSHAL
def marshal_dump def marshal_dump
[@lang] [@lang]
end end
def marshal_load(array) 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
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 end
# Save/Load global instance of persistent
FILE_NAME = Oneshot::SAVE_PATH + '/persistent.dat'
def save def save
File.open(FILE_NAME, 'wb') do |file| begin
Marshal.dump($persistent, file) 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
end end
def self.load def self.load
if FileTest.exist?(FILE_NAME) begin
File.open(FILE_NAME, 'rb') do |file| file_name = nil
$persistent = Marshal.load(file)
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
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 $persistent = Persistent.new
end end
end end

View file

@ -43,7 +43,7 @@ class Scene_Title
# chinese has its own special title screen so check for it # chinese has its own special title screen so check for it
translation_name = "#{$persistent.langcode}/#{$data_system.title_name}" 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) @sprite.bitmap = RPG::Cache.title(translation_name)
else else
if File.exist?("badend.lock") if File.exist?("badend.lock")
@ -87,7 +87,7 @@ class Scene_Title
@cursor_pos = 0 @cursor_pos = 0
# Play title BGM # Play title BGM
if File.exist?("badend.lock") if File.exist?("badend.lock")
#TODO: fix #TODO: fitx
Audio.bgm_play("Audio/BGM/MyBurdenIsDead.ogg", 100, 100) Audio.bgm_play("Audio/BGM/MyBurdenIsDead.ogg", 100, 100)
else else
$game_system.bgm_play($data_system.title_bgm) $game_system.bgm_play($data_system.title_bgm)
@ -98,7 +98,7 @@ class Scene_Title
# Execute transition # Execute transition
Graphics.transition(40) Graphics.transition(40)
# Main loop # Main loop
loop do while true
# Update game screen # Update game screen
Graphics.update Graphics.update
# Update input information # Update input information
@ -177,7 +177,7 @@ class Scene_Title
if !@window_settings_title.visible if !@window_settings_title.visible
# Handle confirmation # Handle confirmation
if Input.trigger?(Input::ACTION) if Input.trigger?(Input::ACTION)
if File.exist?("badend.lock") if File.exis?("badend.lock")
case @cursor_pos case @cursor_pos
when 0 # Continue when 0 # Continue
EdText.info(tr("Savior not found")) EdText.info(tr("Savior not found"))