mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-20 13:59:57 +00:00
Fixes for Engine and for scripts
This commit is contained in:
parent
c0306a0042
commit
160f4ff8b6
3 changed files with 150 additions and 34 deletions
|
|
@ -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");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
Loading…
Reference in a new issue