mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-22 23:06:18 +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_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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue