GRB TitleChanger XP

Матеріал з РПГ.укр
Перейти до: навігація, пошук

GRB_TitleChanger_XP — це скрипт для RPG Maker XP, який дозволяє змінити титульний екран після певних сюжетних моментів в грі.

Код можна побачити нижче, в розділі код.

Доступні версії для інших рушіїв RPG Maker:

Використання[ ]

Щоб змінити фонове зображення на титульному екрані, використовуйте команду подій «Скрипт» (Script) з наступним кодом:

set_title_img "Title"

Замініть Title на назву файлу в директорії Graphics/System (без розширення). Щоб повернути стандартний титульний екран, просто використовуйте такий код:

set_title_img

Принцип роботи[ ]

В RPG Maker XP немає єдиного файлу з даними, які міняються під час гри, але є спільними для всіх ігор, тому скрипт зберігає свої налаштування в файлах записаних ігор, а при запуску перевіряє, в якому файлі записаної гри зберігається найновіша версія налаштувань.

Ліцензія[ ]

Плагін розповсюджується згідно з ліцензією Creative Commons Zero, тобто автори відмовляються від авторських прав (настільки, наскільки це взагалі можливо зробити згідно з законодавством).

Код[ ]

Показати код скрипту

################################################################################
# [Українська; беларуская ніжэй; русский ниже; English below]
# GRB_TitleChanger_XP
#
# Автори: команда Гарбата
# Сторінка скрипту: https://рпг.укр/GRB_TitleChanger_XP
#
# Дозволяє змінити графіку титульного екрану після певних моментів сюжету.
#
# Щоб змінити фонове зображення на титульному екрані, використовуйте
# команду подій «Скрипт» (Script) з наступним кодом:
#
# set_title_img "Title"
#
# Замініть Title на назву файлу в директорії Graphics/Titles (без розширення).
# Щоб повернути стандартний титульний екран, просто використовуйте такий код:
#
# set_title_img
#
# Вибране ім'я файлу зберігається в записаному файлі. Перевіряються всі
# записані файли та вибирається той, в якому графіка титульного екрану змінена
# останньою.
#
# Цей скрипт передано до суспільного надбання згідно з CC0. Детальніше див.
# на сторінці https://creativecommons.org/publicdomain/zero/1.0/deed.uk
# (Його можна використовувати в будь-яких проєктах, в тому числі комерційних.
# Вказувати авторів не обов'язково.)
################################################################################
# [Беларуская; українська више; русский ниже; English below]
# GRB_TitleChanger_XP
#
# Аўтары: каманда Гарбата
# Старонка скрыпту: https://рпг.укр/GRB_TitleChanger_XP
#
# Дазваляе змяніць графіку тытульнага экрана пасля пэўных маментаў сюжэту.
#
# Каб змяніць фонавы малюнак на тытульным экране, выкарыстоўвайце каманду
# падзей «Скрыпт» (Script) з наступным кодам:
#
# set_title_img "Title"
#
# Замяніце Title на назву файла ў дырэкторыі Graphics/Titles (без расшырэння).
# Каб павярнуць стандартны тытульны экран, проста выкарыстоўвайце такі код:
#
# set_title_img
#
# Выбранае імя файла будзе запісанае ў файле запісу гульні. Пры запуску
# правяраюцца ўсе запісаныя файлы і выбіраецца той, у якім графіка тытульнага
# экрана змененая апошняй.
#
# Гэты скрыпт перададзены ў грамадскі набытак згодна з CC0. Падрабязней гл.
# на старонцы https://creativecommons.org/publicdomain/zero/1.0/deed.be
# (Яго можна выкарыстоўваць у любых праектах, у тым ліку камерцыйных.
# Указваць аўтарства не абавязкова.)
################################################################################
# [Русский; українська више; беларуская вышэй; English below]
# GRB_TitleChanger_XP
#
# Авторы: команда Гарбата
# Страница скрипта: https://рпг.укр/GRB_TitleChanger_XP
#
# Позволяет изменить графику титульного экрана после определённых моментов
# сюжета.
#
# Чтобы изменить фоновый рисунок на титульном экране, используйте команду
# событий «Скрипт» со следующим кодом:
#
# set_title_img "Title"
#
# Замените Title на название файла в директории Graphics/Titles (без
# расширения). Чтобы вернуть стандартный титульный экран, просто используйте
# такой код:
#
# set_title_img
#
# Выбранное имя файла будет записано в файле сохранения. При запуске
# проверяются все сохранения и выбирается то, в котором графика титульного
# экрана изменена последней.
#
# Этот скрипт передан в общественное достояние согласно CC0. Подробнее см. на
# странице https://creativecommons.org/publicdomain/zero/1.0/deed.ru
# (Его можно использовать в любых проектах, в том числе коммерческих.
# Указывать авторство не обязательно.)
################################################################################
# [English; українська вище; беларуская вышэй; русский выше]
# GRB_TitleChanger_XP
#
# Authors: Garbata team
# Script page: https://рпг.укр/GRB_TitleChanger_XP (in Ukrainian)
#
# Allows to change the title screen background after some plot moments
# during the gameplay.
#
# To change the title screen background image, use the Script event command
# with the following code:
#
# set_title_img "Title"
#
# Replace Title with the filename of the file (without extension) in
# the Graphics/Titles directory (but keep the quotation marks around it).
# To revert to the standard title screen, just use the following code:
# set_title_img
#
# The filename is stored in the savegame. All savegames are checked, and the
# title screen that was changed the latest will be chosen.
#
# This script is placed into public domain according to the CC0 public domain
# dedication. See https://creativecommons.org/publicdomain/zero/1.0/ for more
# information. (It can be used in any projects, including commercial ones.
# Crediting the authors is not required.)
################################################################################

class << RPG::Cache
  alias_method :grbTitleChangerXp_title, :title
  def title(filename)
    changed_filename = grbTitleChangerXp_postprocessTitleFilename(filename)
    grbTitleChangerXp_title(changed_filename)
  end
  
  def grbTitleChangerXp_postprocessTitleFilename(filename)
    return filename unless $data_system
    return filename if filename != $data_system.title_name
    
    new_filename = Game_System.grbTitleChangerXp_find_latest_title_img
    return new_filename || $data_system.title_name
  end
end

class Game_System
  attr_accessor :grbTitleChangerXp_title_img
  attr_accessor :grbTitleChangerXp_title_img_date
  
  def self.grbTitleChangerXp_find_latest_title_img
    curr_title = nil
    curr_date = Time.at(0)
    
    grbTitleChangerXp_find_savefiles.each do |filename|
      save_title, save_date = grbTitleChangerXp_get_title_info_from_savefile(filename)
      if  save_date && save_date > curr_date then
        curr_date = save_date
        curr_title = save_title
      end
    end
    
    return curr_title
  end
  
  def self.grbTitleChangerXp_find_savefiles
    Dir.glob('Save*.rxdata')
  end
  
  def self.grbTitleChangerXp_get_title_info_from_savefile(filename)
    return unless FileTest.exist?(filename)
    
    file = File.open(filename, "r")
    begin
      Marshal.load(file) # skip characters
      Marshal.load(file) # skip frame_count
      game_system = Marshal.load(file)
    rescue
      game_system = nil
    ensure
      file.close
    end
    
    return nil unless game_system
    
    return game_system.grbTitleChangerXp_title_img, \
       game_system.grbTitleChangerXp_title_img_date
  end
end

class Interpreter
  def set_title_img(title = nil)
    $game_system.grbTitleChangerXp_title_img = title
    $game_system.grbTitleChangerXp_title_img_date = Time.now
  end
end