#============================================================================== # ○RGSS3立ち絵口パク #イベントの移動ルートの設定からピクチャを操作します。 #ランダムで口パクパターンを生成する機能も搭載。 #作成者:riru/ガラス細工の夢幻 #http://garasuzaikunomugen.web.fc2.com/index.html #※更新履歴 #2016/6/25 公開 #2017/4/17 手抜き機能追加。 #2017/4/19 手抜き機能で閉じ口画像を指定したときにエラーが出るのを修正。 #2017/8/18 手抜き機能にメッセージをスキップすることで自動的に閉じ口になるように変更。 # #<使い方> #・移動ルートの設定のスクリプトで #roop_picture(ピクチャ番号,"ピクチャのファイル名", 原点(0で左上1で中心), x座標, y座標, x拡大率, y拡大率, 不透明度, 合成方法(0で通常、1で加算、2で減算),反転(trueでピクチャ反転。省略可)) #と記述。こちらは間にウェイトを入れないとちゃんと口パクしないので注意してください #・ピクチャを消したい場合はpicture_erase(layer)を記述。 #・移動ルートの対象はイベント内やイベントページの自立移動などで動いていないイベントならなんでもいいです。口パク用のダミーを作っておくと安心かも #・台詞と一緒に動かす場合はウェイトするのチェックをはずしてください # #<口パクパターンランダム生成の使い方> #・loop_time(口パクする回数を入力)←これを先に入れないとバグります #・roop_kutipaku(ピクチャ番号,"1枚目のピクチャのファイル名(開き口)","2枚目のピクチャのファイル名(開きかけ口)", "3枚目のピクチャのファイル名(閉じ口(これのみ""を指定すると指定したピクチャ番号のピクチャを消去になります)", #原点(0で左上1で中心), x座標, y座標, x拡大率, y拡大率, 不透明度, 合成方法(0で通常、1で加算、2で減算),反転(trueでピクチャ反転。省略可)) #を記述。下で指定したウェイトをはさんで回数分口パクします。 #・口パクの間隔を一部だけ変えたい場合は移動ルートのウェイトをはさんでまた↑の記述をしてください #・消したい場合、移動ルートの対象などは上と同様。 # #<手抜き機能の使い方> #・手抜き機能とは、メッセージの前にコマンドを入れるだけで口パク数とウエイトを自動で作って口パクさせてくれる機能です。 #途中で口の種類を変えたり細かい調整はできませんが、いちいち文字数を数えなくていいのでストレスは大幅に軽減されるでしょう #・口パクさせたいメッセージの前にスクリプトコマンドで$auto_kutipaku="この中にランダムで使うroop_kutipakuのコマンド"を記入します。 #このとき、口のファイル名の"にはその前に\を挿入してください #例)$auto_kutipaku="roop_kutipaku(14,\"鳥兵士1立ち絵開き口\",\"鳥兵士1立ち絵開きかけ口\",\"\", 0, $game_variables[9], $game_variables[10], 100, 100, 255, 0)" #・閉じる口を用意している場合は、同様に$auto_kutipaku_erase="roop_pictureの閉じ口を指定したコマンド"を記入してください。こちらも"の前には\を挿入してください。 # #<注意!>どちらもメッセージを決定キーでスキップしても指定した分動き続けるので、 #スキップしたら口パクを止める場合は文章の表示のあとに<表示で指定した対象と同じ対象で> #移動ルートの設定を入れてください。中身は空で構いません #============================================================================== #ランダム口パクで次の口パクが始まるまでのウェイト数 RIRU_PICTURE_WEIT_COUNT = 6 #漢字等の口パク数設定項目。例RIRU_AUTOKUTIPAKU_KANJILIST = [["最初",3],["先輩",4],["紅",4],["様",2]] RIRU_AUTOKUTIPAKU_KANJILIST = [] #手抜き機能に使うイベントID RIRU_AUTOKUTIPAKU_EVENT = 1 #============================================================================== # ■ Game_Message #------------------------------------------------------------------------------ #  文章や選択肢などを表示するメッセージウィンドウの状態を扱うクラスです。この # クラスのインスタンスは $game_message で参照されます。 #============================================================================== class Game_Message #-------------------------------------------------------------------------- # ● クリア #-------------------------------------------------------------------------- alias riru_kutiauto_clear clear def clear riru_kutiauto_clear if ($auto_kutipaku_erase_mes !=""&&$auto_kutipaku_erase_mes !=nil)&&$game_map!=nil case RIRU_AUTOKUTIPAKU_EVENT when -1 # プレイヤー event = $game_player when 0 # このイベント events = $game_map.events events = events[@event_id] else # 特定のイベント events = $game_map.events event = events[RIRU_AUTOKUTIPAKU_EVENT] end $route = RPG::MoveRoute.new $route.repeat = false #動作を繰り返すか $route.skippable = false #移動を飛ばすか $route.wait = true #移動が終わるまで待つか $route.list = [] $route.list.push(RPG::MoveCommand.new(45, [$auto_kutipaku_erase_mes])) $route.list.push(RPG::MoveCommand.new)#移動コマンドの終端を設定 event.force_move_route($route) #移動の実行 $auto_kutipaku_erase_mes="" end end end class Game_Character #-------------------------------------------------------------------------- # ● まばたき用ピクチャの表示 #-------------------------------------------------------------------------- def roop_picture(layer,name, origin, x, y, zoom_x, zoom_y, opacity, blend_type,mirror = false) screen.pictures[layer].show(name,origin,x, y,zoom_x,zoom_y,opacity,blend_type) screen.pictures[layer].mirror ^= true if mirror == true return true end #-------------------------------------------------------------------------- # ● まばたき用ピクチャの表示 #-------------------------------------------------------------------------- def loop_time(time) @pictureloop = time @looppicture2 = 5#randにかぶらない適当数字 return true end #-------------------------------------------------------------------------- # ● 口パク用ピクチャの表示2014/10/4めんどくさいのを解消用 #-------------------------------------------------------------------------- def roop_kutipaku(layer,name,name2,name3, origin, x, y, zoom_x, zoom_y, opacity, blend_type,mirror = false) @pictureloop = 0 if @pictureloop == nil #種類被り防止 loop do @looppicture = rand(3) break if @looppicture != @looppicture2 end @looppicture2 = @looppicture #被り防止ここまで case @looppicture when 0 screen.pictures[layer].show(name,origin,x, y,zoom_x,zoom_y,opacity,blend_type) when 1 screen.pictures[layer].show(name2,origin,x, y,zoom_x,zoom_y,opacity,blend_type) when 2 if name3 =="" screen.pictures[layer].erase else screen.pictures[layer].show(name3,origin,x, y,zoom_x,zoom_y,opacity,blend_type) end end screen.pictures[layer].mirror ^= true if mirror == true @wait_count = RIRU_PICTURE_WEIT_COUNT @pictureloop -= 1 @move_succeed = false if @pictureloop > 0 return true if @pictureloop <= 0 end #-------------------------------------------------------------------------- # ● ピクチャの消去 #-------------------------------------------------------------------------- def picture_erase(layer) screen.pictures[layer].erase return true end #-------------------------------------------------------------------------- # ● 画面系コマンドの対象取得 #-------------------------------------------------------------------------- def screen if $game_party.in_battle return $game_troop.screen else return $game_map.screen end end #-------------------------------------------------------------------------- # ● ピクチャの反転 #-------------------------------------------------------------------------- def ピクチャの反転2(n, m = nil) if m == nil screen.pictures[n].mirror ^= true #width = self.bitmap.width screen.pictures[n].mirror_flug = true else screen.pictures[n].mirror = m screen.pictures[n].mirror_flug = true end end end #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 文章の表示 #-------------------------------------------------------------------------- def command_101 wait_for_message $game_message.face_name = @params[0] $game_message.face_index = @params[1] $game_message.background = @params[2] $game_message.position = @params[3] while next_event_code == 401 # 文章データ @index += 1 $game_message.add(@list[@index].parameters[0]) end ######################## kana = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよわをんらりるれろぁぃぅぇぉっゃゅょゎヴがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽアイウエオガギグゲゴカキクケコザジズゼゾサシスセソダヂヅデドタチツテトバビブベボナニヌネノパピプペポハヒフヘホァィゥェォマミムメモッャュョヮヤユヨワンラリルレロヴヲ"; kutibaku_texts = $game_message.texts.join("") kutibaku_texts=kutibaku_texts.split("") textvalue = 0 kutipaku_ar = [] $auto_kutipaku_erase="" if $auto_kutipaku_erase == nil $auto_kutipaku="" if $auto_kutipaku == nil unless $auto_kutipaku=="" kutipaku_number=$auto_kutipaku.split(",") kutipaku_number=kutipaku_number[0].split("(") kutipaku_number=kutipaku_number[1] $auto_kutipaku=$auto_kutipaku.delete("\n") $auto_kutipaku_erase=$auto_kutipaku_erase.delete("\n") $route = RPG::MoveRoute.new $route.repeat = false #動作を繰り返すか $route.skippable = false #移動を飛ばすか $route.wait = false #移動が終わるまで待つか $route.list = [] nobasi = "ー〜" kuuhaku = "  " nasi = "" santen = "…" kutouten = "、。" t_tag = "\\" skip_value = 0 $mc = RPG::MoveCommand for i in 0...kutibaku_texts.size kanji_hantei = false if(skip_value>0) skip_value-=1 next end if kana.include?(kutibaku_texts[i]) textvalue+= 1 elsif nobasi.include?(kutibaku_texts[i])#伸ばし棒、 $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 $route.list.push($mc.new(15, [12])) textvalue=0 elsif kuuhaku.include?(kutibaku_texts[i]) || nasi.include?(kutibaku_texts[i]) elsif santen.include?(kutibaku_texts[i])#三点リーダ、 $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 $route.list.push($mc.new(15, [12])) if $auto_kutipaku_erase =="" $route.list.push($mc.new(45, ["picture_erase(#{kutipaku_number})"])) else $route.list.push($mc.new(45, [$auto_kutipaku_erase])) end textvalue=0 elsif kutouten.include?(kutibaku_texts[i])#句読点、 $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 if $auto_kutipaku_erase =="" $route.list.push($mc.new(45, ["picture_erase(#{kutipaku_number})"])) else $route.list.push($mc.new(45, [$auto_kutipaku_erase])) end textvalue=0 elsif kutibaku_texts[i].include?(t_tag)#特殊文字 if kutibaku_texts[i+1]=="."#小ウェイト $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 if $auto_kutipaku_erase =="" $route.list.push($mc.new(45, ["picture_erase(#{kutipaku_number})"])) else $route.list.push($mc.new(45, [$auto_kutipaku_erase])) end $route.list.push($mc.new(15, [12])) skip_value=1 textvalue=0 elsif kutibaku_texts[i+1]=="|"#小ウェイト $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 if $auto_kutipaku_erase =="" $route.list.push($mc.new(45, ["picture_erase(#{kutipaku_number})"])) else $route.list.push($mc.new(45, [$auto_kutipaku_erase])) end $route.list.push($mc.new(15, [60])) skip_value=1 textvalue=0 elsif kutibaku_texts[i+2]=="["#色かえなど m = 3 while kutibaku_texts[i+m]!="]" m+=1 end skip_value=m else skip_value=1 end else#漢字 n=1 tx_leng=1 for j in 0...RIRU_AUTOKUTIPAKU_KANJILIST.size newstr = RIRU_AUTOKUTIPAKU_KANJILIST[j][0].split("") if newstr[0]==kutibaku_texts[i] n=1 if newstr.length>1 while n1 end end $route.list.push($mc.new(45, ["loop_time(#{textvalue})"]))if textvalue>0 $route.list.push($mc.new(45, [$auto_kutipaku]))if textvalue>0 if $auto_kutipaku_erase =="" $route.list.push($mc.new(45, ["picture_erase(#{kutipaku_number})"])) $auto_kutipaku_erase_mes="" else $route.list.push($mc.new(45, [$auto_kutipaku_erase])) $auto_kutipaku_erase_mes=$auto_kutipaku_erase end $route.list.push($mc.new)#移動コマンドの終端を設定 $cha = get_character(RIRU_AUTOKUTIPAKU_EVENT) #イベントID代入 $cha.force_move_route($route) #移動の実行 $auto_kutipaku_erase="" $auto_kutipaku="" end ################# case next_event_code when 102 # 選択肢の表示 @index += 1 setup_choices(@list[@index].parameters) when 103 # 数値入力の処理 @index += 1 setup_num_input(@list[@index].parameters) when 104 # アイテム選択の処理 @index += 1 setup_item_choice(@list[@index].parameters) end wait_for_message end end