Project1
标题:
找到了显示小标题的脚本但是不会用~
[打印本页]
作者:
nozomiqx
时间:
2010-4-5 17:40
标题:
找到了显示小标题的脚本但是不会用~
本帖最后由 nozomiqx 于 2010-4-5 19:19 编辑
事实上就是:找到了显示小标题的脚本但是不会用~
一启动就出错:
原地址所述:
サブタイトル表示 最終更新日 06/10/8 バージョン2.10
[効果]
メニュー画面、およびセーブ画面に、サブタイトルを表示できるようにします。
[特徴]
イベント>スクリプトに
$subtitle = "○○○(好きな名称)"
といれるだけで、簡単にサブタイトルを変更できます。
[注意点]
サブタイトルは、最高で11,2文字ぐらいを目安にしてください。
長くても入力できますが、その場合は文字が圧縮されて表示されます。
[カスタマイズ]
一番最初のサブタイトルを入力します。ニューゲームで始めると、必ずこのサブタイトルが表示されます。
[修正]
06/10/8 他のスクリプトと競合しないように調整
スクリプトはこちら→Subtitle.txt
脚本如下:
# サブタイトル Ver.2.10
# 制作:神鏡学斗
#
http://www.lemon-slice.net/
# メニュー画面、およびセーブ画面にサブタイトルを追加するスクリプトです。
# 本編中でサブタイトルを変更する時は
# イベント>スクリプトで$subtitle = "○○○(好きな名称)"と記述してください。
#==============================================================================
# ■ カスタマイズ
#==============================================================================
class Scene_Title
alias subt_customize customize
def customize
#--------------------------------------------------------------------------
# ● 一番最初のサブタイトル名を入力(初期値=オープニング)
# ちゃんと"○○○"と、""で囲ってくださいね(文字が紫色になるように)。
#--------------------------------------------------------------------------
subt_customize
$subtitle = "オープニング"
end
end
#==============================================================================
# ■ カスタマイズここまで
#==============================================================================
#
#==============================================================================
# ■ Window_subtitle
#------------------------------------------------------------------------------
# サブタイトルを表示するウィンドウです。
#==============================================================================
class Window_subtitle < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 480, 64)
self.z = 6100
self.back_opacity = 192
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
cx = contents.text_size($subtitle).width
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, cx, 32, $subtitle, 2)
end
end
#==============================================================================
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
# メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 480, 416)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 64
y = i * 98
actor = $game_party.actors
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 144, y)
draw_actor_level(actor, x, y + 30)
draw_actor_state(actor, x + 90, y + 30)
draw_actor_exp(actor, x, y + 60)
draw_actor_hp(actor, x + 236, y + 30)
draw_actor_sp(actor, x + 236, y + 60)
end
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 98, self.width - 32, 92)
end
end
end
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# タイトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# 戦闘テストの場合
if $BTEST
battle_test
return
end
# データベースをロード
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# システムオブジェクトを作成
$game_system = Game_System.new
# タイトルグラフィックを作成
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# コマンドウィンドウを作成
s1 = "ニューゲーム"
s2 = "コンティニュー"
s3 = "シャットダウン"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# カスタマイズ挿入ポイント
customize
# コンティニュー有効判定
# セーブファイルがひとつでも存在するかどうかを調べる
# 有効なら @continue_enabled を true、無効なら false にする
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
# コンティニューが有効な場合、カーソルをコンティニューに合わせる
# 無効な場合、コンティニューの文字をグレー表示にする
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# タイトル BGM を演奏
$game_system.bgm_play($data_system.title_bgm)
# ME、BGS の演奏を停止
Audio.me_stop
Audio.bgs_stop
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# コマンドウィンドウを解放
@command_window.dispose
# タイトルグラフィックを解放
@sprite.bitmap.dispose
@sprite.dispose
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
#--------------------------------------------------------------------------
# ● カスタマイズポイント(変更不要)
#--------------------------------------------------------------------------
class Scene_Menu
alias subt_customize customize
def customize
subt_customize
# サブタイトルウィンドウを作成
@subtitle_window = Window_subtitle.new
@subtitle_window.x = 160
@subtitle_window.y = 416
end
alias subt_customize_d menu_customize_dispose
def menu_customize_dispose
subt_customize_d
@subtitle_window.dispose
end
alias subt_customize_u menu_customize_update
def menu_customize_update
subt_customize_u
@subtitle_window.update
end
#--------------------------------------------------------------------------
# ● カスタマイズポイントここまで
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "ステータス"
s5 = "セーブ"
s6 = "ゲーム終了"
$menu_command = [s1, s2, s3, s4, s5, s6]
customize
@command_window = Window_Command.new(160, $menu_command)
@command_window.index = @menu_index
# パーティ人数が 0 人の場合
if $game_party.actors.size == 0
# アイテム、スキル、装備、ステータスを無効化
@command_window.disable_item($menu_command.index(s1))
@command_window.disable_item($menu_command.index(s2))
@command_window.disable_item($menu_command.index(s3))
@command_window.disable_item($menu_command.index("ステータス"))
end
# セーブ禁止の場合
if $game_system.save_disabled
# セーブを無効にする
@command_window.disable_item($menu_command.index("セーブ"))
end
customize_load
# ゴールドウィンドウを作成
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# ステータスウィンドウを作成
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@command_window.dispose
@gold_window.dispose
@status_window.dispose
menu_customize_dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
@gold_window.update
@status_window.update
menu_customize_update
# コマンドウィンドウがアクティブの場合: update_command を呼ぶ
if @command_window.active
update_command
return
end
# ステータスウィンドウがアクティブの場合: update_status を呼ぶ
if @status_window.active
update_status
return
end
end
end
#==============================================================================
# ■ Window_SaveFile
#------------------------------------------------------------------------------
# セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。
#==============================================================================
class Window_SaveFile < Window_Base
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :filename # ファイル名
attr_reader :selected # 選択状態
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# file_index : セーブファイルのインデックス (0~3)
# filename : ファイル名
#--------------------------------------------------------------------------
def initialize(file_index, filename)
super(0, 64 + file_index % 4 * 104, 640, 104)
self.contents = Bitmap.new(width - 32, height - 32)
@file_index = file_index
@filename = "Save#{@file_index + 1}.rxdata"
@time_stamp = Time.at(0)
@file_exist = FileTest.exist?(@filename)
if @file_exist
file = File.open(@filename, "r")
@time_stamp = file.mtime
@characters = Marshal.load(file)
@frame_count = Marshal.load(file)
@subtitle = Marshal.load(file)
@game_system = Marshal.load(file)
@game_switches = Marshal.load(file)
@game_variables = Marshal.load(file)
@total_sec = @frame_count / Graphics.frame_rate
file.close
end
refresh
@selected = false
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# ファイル番号を描画
self.contents.font.color = normal_color
name = "ファイル #{@file_index + 1}"
self.contents.draw_text(4, 0, 600, 32, name)
@name_width = contents.text_size(name).width
# セーブファイルが存在する場合
if @file_exist
# キャラクターを描画
for i in
[email protected]
bitmap = RPG::Cache.character(@characters
[0], @characters
[1])
cw = bitmap.rect.width / 4
ch = bitmap.rect.height / 4
src_rect = Rect.new(0, 0, cw, ch)
x = 348 - @characters.size * 24 + i * 48 - cw / 2
self.contents.blt(x, 68 - ch, bitmap, src_rect)
end
# プレイ時間を描画
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 8, 600, 32, time_string, 2)
# タイムスタンプを描画
self.contents.font.color = normal_color
time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
self.contents.draw_text(4, 40, 600, 32, time_string, 2)
# サブタイトルを描画
self.contents.draw_text(4, 40, 212, 32, @subtitle)
end
end
end
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
# セーブ画面の処理を行うクラスです。
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# ● セーブデータの書き込み
# file : 書き込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def write_save_data(file)
# セーブファイル描画用のキャラクターデータを作成
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors
characters.push([actor.character_name, actor.character_hue])
end
# セーブファイル描画用のキャラクターデータを書き込む
Marshal.dump(characters, file)
# プレイ時間計測用のフレームカウントを書き込む
Marshal.dump(Graphics.frame_count, file)
# サブタイトルを書き込む
Marshal.dump($subtitle, file)
# セーブ回数を 1 増やす
$game_system.save_count += 1
# マジックナンバーを保存する
# (エディタで保存するたびにランダムな値に書き換えられる)
$game_system.magic_number = $data_system.magic_number
# 各種ゲームオブジェクトを書き込む
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_screen, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
end
end
#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
# ロード画面の処理を行うクラスです。
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● セーブデータの読み込み
# file : 読み込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def read_save_data(file)
# セーブファイル描画用のキャラクターデータを読み込む
characters = Marshal.load(file)
# プレイ時間計測用のフレームカウントを読み込む
Graphics.frame_count = Marshal.load(file)
$subtitle = Marshal.load(file)
# 各種ゲームオブジェクトを読み込む
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
# マジックナンバーがセーブ時と異なる場合
# (エディタで編集が加えられている場合)
if $game_system.magic_number != $data_system.magic_number
# マップをリロード
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
# パーティメンバーをリフレッシュ
$game_party.refresh
end
end
#==============================================================================
# 本脚本来自
http://www.lemon-slice.net/index.html
#==============================================================================
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1