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_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");
}

View file

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

View file

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