Project1

标题: 请问有没有让角色在发动技能时、死亡时等发出语音的脚... [打印本页]

作者: 是猪别乱叫    时间: 2016-5-14 15:06
标题: 请问有没有让角色在发动技能时、死亡时等发出语音的脚...
请问有没有让角色在发动技能时、死亡时等发出语音的脚本?
试过在技能动画里添加,但技能很多角色都能用,语音无法单独搭配。。。
最好敌人也能添加语音。。。
作者: 御曹司    时间: 2016-5-14 15:19
ろかん   http://kaisou-ryouiki.sakura.ne.jp/
里面有个バトルボイス(ballte voice)脚本可以满足您的需求。
敌人语音的话建议用技能动画做。
作者: 是猪别乱叫    时间: 2016-5-14 15:41
御曹司 发表于 2016-5-14 15:19
ろかん   http://kaisou-ryouiki.sakura.ne.jp/
里面有个バトルボイス(ballte voice)脚本可以满足您的 ...

。。。看不懂,找不到下载点。。。
作者: 是猪别乱叫    时间: 2016-5-14 18:13
哎,,,看来没有了吗?
作者: 邪正人鬼    时间: 2016-5-14 20:50
本帖最后由 邪正人鬼 于 2016-5-14 20:57 编辑

以下脚本来自http://kaisou-ryouiki.sakura.ne.jp/,感谢@御曹司 提供站点(素材站get√),脚本内部的日语请自行机翻/人翻。
  1. =begin
  2.       RGSS3
  3.       
  4.       ★ バトルボイス ★
  5.       
  6.       戦闘中の行動に応じてボイスを再生します。
  7.       
  8.       ● 使い方 ●========================================================
  9.       Audioフォルダ配下に「VOICE」というフォルダを作成し、
  10.       そこにボイスファイルを保存してください。
  11.       --------------------------------------------------------------------
  12.       アイテム・スキルの使用前にボイスを再生する機能がありますが、
  13.       メモ欄に「使用ボイス無し」と記述されたアイテム・スキルを使用した
  14.       際には、その機能は無効化されます。
  15.       ====================================================================
  16.       
  17.       ● イベントコマンド ●==============================================
  18.       初期状態ではアクターにはアクターIDと等しいIDのボイス設定が適応されています。
  19.         例) アクターIDが 2 のアクターには ボイス設定の 2 が対応
  20.       --------------------------------------------------------------------
  21.       イベントコマンドのスクリプトより下記のコードを実行することで、
  22.       アクターが使用するボイス設定を任意のものに変更できます。
  23.       --------------------------------------------------------------------
  24.       change_voice(actor_id, voice_id)
  25.       --------------------------------------------------------------------
  26.       actor_id : ボイス設定を変更したいアクターID
  27.       voice_id : 利用したいボイス設定ID
  28.       --------------------------------------------------------------------
  29.         例) change_voice(2, 14)
  30.           上記スクリプトを実行すると、
  31.           「アクターIDが 2 のアクターには ボイス設定の 14 が対応」
  32.           といったように設定が変更されます。
  33.       ====================================================================
  34.       
  35.       ● スキル別のボイス設定方法 ●======================================
  36.       「VOICE」フォルダに [vid○_sid○] という形式の文字列が含まれた
  37.       ファイル名のボイスファイルが存在する場合、自動的に再生されます。
  38.       ○の部分には ボイス設定ID と スキルID を数値で指定します。
  39.       --------------------------------------------------------------------
  40.       この設定がされたスキルを使用した際には、
  41.       設定箇所で設定されたスキル使用時のボイスよりも優先して再生されます。
  42.       --------------------------------------------------------------------
  43.         例1)
  44.         ボイス設定ID 3 に対応するバトラーが
  45.         スキルID 55 のスキルを使用した際に
  46.         ボイスファイル skill_ice.wav を再生させたい場合、
  47.         ボイスファイル名を skill_ice[vid3_sid55].wav とします。
  48.         
  49.         この場合 [vid3_sid55] はどの位置に含めても構いません。
  50.         例えば skill[vid3_sid55]_ice.wav としても問題なく動作します。
  51.       --------------------------------------------------------------------
  52.         例2)
  53.         skill_ice1[vid3_sid55].wav
  54.         skill_ice2[vid3_sid55].wav
  55.         skill_ice3[vid3_sid55].wav
  56.         
  57.         上記のように、同じ設定をしたボイスファイルが複数存在する場合、
  58.         ランダムで再生されるファイルが選択されます。
  59.       ====================================================================
  60.       
  61.       ● 注意 ●==========================================================
  62.       ニューゲームから始めないとエラーを吐きます。
  63.       ====================================================================
  64.       
  65.       ver1.10
  66.       
  67.       Last Update : 2013/06/28
  68.       06/28 : スキル別にボイスの設定を可能に
  69.       ----------------------2013--------------------------
  70.       06/10 : 新規
  71.       ----------------------2012--------------------------
  72.       
  73.       ろかん   http://kaisou-ryouiki.sakura.ne.jp/
  74. =end

  75. #===========================================
  76. #   設定箇所
  77. #===========================================
  78. module BattleVoice
  79. #-----------------------------------------------------------------------------
  80. # 各戦闘行動に対してボイスを設定してください。
  81. # 設定のないバトラーのボイスは再生されません。
  82. # 設定の基本形式は以下のとおりです。
  83. #【形式】
  84. # ① => ["②", "②", "②".....],
  85. #   ① ボイス設定ID(数値)
  86. #      初期状態ではこの値はアクターID もしくは エネミーIDに対応しています。
  87. #      エネミーのボイスを設定する場合には ID を"負の値にして"設定してください。
  88. #      例) IDが 4 のエネミーを設定する場合、-4 とする。
  89. #
  90. #   ② ボイスファイル名(文字列,拡張子不要)
  91. #      同キャラクターに複数のボイスが設定されている場合、
  92. #      ランダムで再生されるファイルが選択されます。
  93. #-----------------------------------------------------------------------------
  94. VOICE_LIST = {
  95.   :battle_start_normal => {
  96.   # ◆ 戦闘開始時:通常(生存メンバーからランダムで一人選んで再生されます)
  97.   # エネミー未対応
  98.     1 => [],
  99.   },
  100.   
  101.   :battle_start_pinch => {
  102.   # ◆ 戦闘開始時:ピンチ(生存メンバーからランダムで一人選んで再生されます)
  103.   # 戦闘開始時に戦闘不能のメンバーが一人でもいる場合に再生
  104.   # エネミー未対応
  105.     1 => [],
  106.   },
  107.   
  108.   :battle_start_surprise => {
  109.   # ◆ 戦闘開始時:不意打ち(生存メンバーからランダムで一人選んで再生されます)
  110.   # ピンチよりも優先されます。
  111.   # エネミー未対応
  112.     1 => [],
  113.   },
  114.   
  115.   :battle_start_preemptive => {
  116.   # ◆ 戦闘開始時:先制攻撃(生存メンバーからランダムで一人選んで再生されます)
  117.   # ピンチよりも優先されます。
  118.   # エネミー未対応
  119.     1 => [],
  120.   },
  121.   
  122.   :attack => {
  123.   # ◆ 通常攻撃
  124.     1 => [],
  125.   },
  126.   
  127.   :guard => {
  128.   # ◆ 防御
  129.     1 => [],
  130.   },
  131.   
  132.   :damage => {
  133.   # ◆ 被ダメージ
  134.     1 => [],
  135.   },
  136.   
  137.   :evasion => {
  138.   # ◆ 回避
  139.     1 => [],
  140.   },
  141.   
  142.   :miss => {
  143.   # ◆ ミス
  144.     1 => [],
  145.   },
  146.   
  147.   :use_item => {
  148.   # ◆ アイテム使用
  149.   # エネミー未対応
  150.     1 => [],
  151.   },
  152.   
  153.   :use_skill => {
  154.   # ◆ スキル使用
  155.   # 個別にボイスの設定がされていないスキルを使用した際に再生されます。
  156.     1 => [],
  157.   },
  158.   
  159.   :dead => {
  160.   # ◆ 戦闘不能
  161.     1 => [],
  162.   },
  163.   
  164.   :recovery => {
  165.   # ◆ 自分以外の仲間からの回復
  166.   # HP の回復, バッドステートの解除
  167.     1 => [],
  168.   },
  169.   
  170.   :support_state => {
  171.   # ◆ 自分以外の仲間からのサポートステート付加
  172.     1 => [],
  173.   },
  174.   
  175.   :bad_state => {
  176.   # ◆ バッドステートが付加
  177.   # バッドステート解除、サポートステート付加よりも優先されます。
  178.     1 => [],
  179.   },
  180.   
  181.   :victory_normal => {
  182.   # ◆ 勝利:通常(生存メンバーからランダムで一人選んで再生されます)
  183.   # エネミー未対応
  184.     1 => [],
  185.   },
  186.   
  187.   :victory_pinch => {
  188.   # ◆ 勝利:ピンチ(生存メンバーからランダムで一人選んで再生されます)
  189.   # 勝利時にピ戦闘不能のメンバーが一人でもいる場合に再生
  190.   # エネミー未対応
  191.     1 => [],
  192.   },
  193.   
  194.   :victory_perfect => {
  195.   # ◆ 勝利:ノーダメージ(生存メンバーからランダムで一人選んで再生されます)
  196.   # ピンチよりも優先されます。
  197.   # エネミー未対応
  198.     1 => [],
  199.   },
  200.   
  201.   :escape => {
  202.   # ◆ 逃走(アクター側は生存メンバーからランダムで一人選んで再生されます)
  203.     1 => [],
  204.   },
  205. }

  206. # ◆ 沈黙ステートID
  207. # ここに登録されたステートが付加しているキャラクターのボイスは
  208. # 再生されなくなります。(沈黙や睡眠など....)
  209. SILENT_STATES = [4, 6]

  210. # ◆ ボイス再生を無効化するスイッチ番号
  211. # ここで指定したスイッチが ON の場合、全てのボイスが再生されなくなります。
  212. SILENT_SWITCH = 10

  213. # ◆ ボイスの音量
  214. VOICE_VOLUME = 90

  215. # ◆ ボイス再生直後に挟むウェイト
  216. # ボイスファイルの頭に無音帯がある等の理由で
  217. # タイミングが合わない場合に利用してください(0~15程度が無難)。
  218. # 必要ない場合は 0 に。
  219. VOICE_WAIT = 10

  220. end
  221. class Window_BattleLog < Window_Selectable
  222. # ◆ サポートステート定義 (パラメーター上昇系など....)
  223. SUPPORT_STATES = [14, 15, 16, 21, 22, 23]

  224. # ◆ バッドステート定義 (毒や麻痺など....)
  225. BAD_STATES = [2, 3, 4, 5, 6, 7, 8]

  226. end
  227. #===========================================
  228. #   ここまで
  229. #===========================================

  230. $rsi ||= {}
  231. $rsi["バトルボイス"] = true

  232. class RPG::UsableItem < RPG::BaseItem
  233.   def play_voice?
  234.     [email protected]?("使用ボイス無し")
  235.   end
  236. end

  237. module BattleVoice
  238.   module_function
  239.   #--------------------------------------------------------------------------
  240.   # ● 生存しておりボイス再生可能なメンバーからランダムで取得
  241.   #--------------------------------------------------------------------------
  242.   def get_rand_member_id(scene_symbol)
  243.     battler = $game_party.alive_members.select{|member|
  244.       if !VOICE_LIST[scene_symbol].has_key?(member.voice_id)
  245.         false
  246.       elsif SILENT_STATES.empty?
  247.         true
  248.       else
  249.         !silent_battler?(member)
  250.       end
  251.     }.sample
  252.     battler ? battler.voice_id : 0
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● ボイス再生不可判定
  256.   #--------------------------------------------------------------------------
  257.   def silent_battler?(battler)
  258.     SILENT_STATES.any?{|state_id| battler.state?(state_id)}
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 再生するファイル名の取得(nilが返る場合は再生されません)
  262.   #--------------------------------------------------------------------------
  263.   def get_filename(scene_symbol, key)
  264.     VOICE_LIST[scene_symbol][key].sample if VOICE_LIST[scene_symbol][key]
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 使用スキル専用のボイスが用意されている場合にそのファイル名を取得
  268.   #--------------------------------------------------------------------------
  269.   def get_skill_filename(key, skill_id)
  270.     filename = Dir::glob("Audio/VOICE/*\\[vid#{key}_sid#{skill_id}\\]*").sample
  271.     File.basename(filename) if filename
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● バトルボイスの再生
  275.   #--------------------------------------------------------------------------
  276.   def play(scene_symbol, battler = nil)
  277.     unless $game_switches[SILENT_SWITCH]
  278.       if battler
  279.         key = battler.actor? ? battler.voice_id : (battler.enemy_id * -1)
  280.         return if silent_battler?(battler)
  281.         filename = get_skill_filename(key, battler.current_action.item.id) if scene_symbol == :use_skill
  282.       else
  283.         key = get_rand_member_id(scene_symbol)
  284.       end
  285.       filename = get_filename(scene_symbol, key) unless filename
  286.       if filename
  287.         Audio.se_play('Audio/VOICE/' + filename, VOICE_VOLUME, 100)
  288.         wait(VOICE_WAIT)
  289.       end
  290.     end
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● ウェイト
  294.   #--------------------------------------------------------------------------
  295.   def wait(duration)
  296.     SceneManager.scene.wait(duration)
  297.   end
  298. end

  299. class << BattleManager
  300.   #--------------------------------------------------------------------------
  301.   # ● 戦闘開始
  302.   #--------------------------------------------------------------------------
  303.   alias battle_start_voice_plus battle_start
  304.   def battle_start
  305.     $game_temp.no_damage = true
  306.     $game_party.on_battle_start
  307.     if @preemptive
  308.       BattleVoice.play(:battle_start_preemptive)
  309.     elsif @surprise
  310.       BattleVoice.play(:battle_start_surprise)
  311.     elsif $game_party.pinch?
  312.       BattleVoice.play(:battle_start_pinch)
  313.     else
  314.       BattleVoice.play(:battle_start_normal)
  315.     end
  316.     battle_start_voice_plus
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 勝利の処理
  320.   #--------------------------------------------------------------------------
  321.   alias process_victory_voice_plus process_victory
  322.   def process_victory
  323.     if $game_temp.no_damage
  324.       BattleVoice.play(:victory_perfect)
  325.     elsif $game_party.pinch?
  326.       BattleVoice.play(:victory_pinch)
  327.     else
  328.       BattleVoice.play(:victory_normal)
  329.     end
  330.     process_victory_voice_plus
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 逃走の処理   ※再定義
  334.   #--------------------------------------------------------------------------
  335.   def process_escape
  336.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  337.     success = @preemptive ? true : (rand < @escape_ratio)
  338.     Sound.play_escape
  339.     if success
  340.       BattleVoice.play(:escape)
  341.       process_abort
  342.     else
  343.       @escape_ratio += 0.1
  344.       $game_message.add('\.' + Vocab::EscapeFailure)
  345.       $game_party.clear_actions
  346.     end
  347.     wait_for_message
  348.     return success
  349.   end
  350. end

  351. class Game_Temp
  352.   #--------------------------------------------------------------------------
  353.   # ● 公開インスタンス変数
  354.   #--------------------------------------------------------------------------
  355.   attr_accessor :no_damage  # 戦闘中ノーダメージフラグ
  356.   #--------------------------------------------------------------------------
  357.   # ● オブジェクト初期化
  358.   #--------------------------------------------------------------------------
  359.   alias initialize_voice_plus initialize
  360.   def initialize
  361.     initialize_voice_plus
  362.     @no_damage = true
  363.   end
  364. end

  365. class Game_Action
  366.   #--------------------------------------------------------------------------
  367.   # ● 防御判定
  368.   #--------------------------------------------------------------------------
  369.   def guard?
  370.     item == $data_skills[subject.guard_skill_id]
  371.   end
  372. end

  373. class Game_ActionResult
  374.   #--------------------------------------------------------------------------
  375.   # ● 公開インスタンス変数
  376.   #--------------------------------------------------------------------------
  377.   attr_accessor :added_new_states
  378.   #--------------------------------------------------------------------------
  379.   # ● ステータス効果のクリア
  380.   #--------------------------------------------------------------------------
  381.   alias clear_status_effects_voice_plus clear_status_effects
  382.   def clear_status_effects
  383.     @added_new_states = []
  384.     clear_status_effects_voice_plus
  385.   end
  386. end

  387. class Game_Battler < Game_BattlerBase
  388.   #--------------------------------------------------------------------------
  389.   # ● 新しいステートの付加
  390.   #--------------------------------------------------------------------------
  391.   alias add_new_state_voice_plus add_new_state
  392.   def add_new_state(state_id)
  393.     @result.added_new_states.push(state_id).uniq!
  394.     add_new_state_voice_plus(state_id)
  395.   end
  396. end

  397. class Game_Actor < Game_Battler
  398.   #--------------------------------------------------------------------------
  399.   # ● 公開インスタンス変数
  400.   #--------------------------------------------------------------------------
  401.   attr_accessor :voice_id
  402.   #--------------------------------------------------------------------------
  403.   # ● セットアップ
  404.   #--------------------------------------------------------------------------
  405.   alias setup_voice_plus setup
  406.   def setup(actor_id)
  407.     setup_voice_plus(actor_id)
  408.     @voice_id = @actor_id
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ● 被ダメージ時の処理
  412.   #--------------------------------------------------------------------------
  413.   def on_damage(value)
  414.     super(value)
  415.     $game_temp.no_damage = false
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● ダメージ効果の実行
  419.   #--------------------------------------------------------------------------
  420.   alias perform_damage_effect_voice_plus perform_damage_effect
  421.   def perform_damage_effect
  422.     BattleVoice.play(:damage, self) unless dead?
  423.     perform_damage_effect_voice_plus
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● HP の再生
  427.   #--------------------------------------------------------------------------
  428.   def regenerate_hp
  429.     super
  430.     $game_temp.no_damage = false if @result.hp_damage > 0
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● コラプス効果の実行
  434.   #--------------------------------------------------------------------------
  435.   alias perform_collapse_effect_voice_plus perform_collapse_effect
  436.   def perform_collapse_effect
  437.     perform_collapse_effect_voice_plus
  438.     BattleVoice.play(:dead, self) if $game_party.in_battle
  439.   end
  440. end

  441. class Game_Enemy < Game_Battler
  442.   #--------------------------------------------------------------------------
  443.   # ● ダメージ効果の実行
  444.   #--------------------------------------------------------------------------
  445.   alias perform_damage_effect_voice_plus perform_damage_effect
  446.   def perform_damage_effect
  447.     BattleVoice.play(:damage, self) unless dead?
  448.     perform_damage_effect_voice_plus
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● コラプス効果の実行
  452.   #--------------------------------------------------------------------------
  453.   alias perform_collapse_effect_voice_plus perform_collapse_effect
  454.   def perform_collapse_effect
  455.     perform_collapse_effect_voice_plus
  456.     BattleVoice.play(:dead, self)
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● 逃げる
  460.   #--------------------------------------------------------------------------
  461.   def escape
  462.     BattleVoice.play(:escape, self)
  463.     super
  464.   end
  465. end

  466. class Game_Party < Game_Unit
  467.   #--------------------------------------------------------------------------
  468.   # ● ピンチ状態判定
  469.   #--------------------------------------------------------------------------
  470.   def pinch?
  471.     !dead_members.empty?
  472.   end
  473. end

  474. class Game_Interpreter
  475.   #--------------------------------------------------------------------------
  476.   # ● アクターのボイス変更
  477.   #--------------------------------------------------------------------------
  478.   def change_voice(actor_id, voice_id)
  479.     $game_actors[actor_id].voice_id = voice_id
  480.   end
  481. end

  482. class Window_BattleLog < Window_Selectable  
  483.   #--------------------------------------------------------------------------
  484.   # ● ダメージの表示
  485.   #--------------------------------------------------------------------------
  486.   alias display_damage_voice_plus display_damage
  487.   def display_damage(target, item)
  488.     subject = SceneManager.scene.subject
  489.     if target.result.missed
  490.       BattleVoice.play(:miss, subject)
  491.     elsif target.result.evaded
  492.       BattleVoice.play(:evasion, target)
  493.     else
  494.       if subject != target && subject.actor? == target.actor? && !target.dead? &&
  495.         (target.result.hp_damage < 0 || target.result.mp_damage < 0 || target.result.tp_damage < 0)
  496.         BattleVoice.play(:recovery, target)
  497.       end
  498.     end
  499.     display_damage_voice_plus(target, item)
  500.   end
  501.   #--------------------------------------------------------------------------
  502.   # ● 影響を受けたステータスの表示
  503.   #--------------------------------------------------------------------------
  504.   alias display_affected_status_voice_plus display_affected_status
  505.   def display_affected_status(target, item)
  506.     if item && target.result.status_affected?
  507.       subject = SceneManager.scene.subject
  508.       if subject != target
  509.         if target.result.added_new_states.any?{|id| BAD_STATES.include?(id)}
  510.           BattleVoice.play(:bad_state, target)
  511.         elsif subject.actor? == target.actor?
  512.           if target.result.removed_states.any?{|id| BAD_STATES.include?(id)}
  513.             BattleVoice.play(:recovery, target)
  514.           elsif target.result.added_new_states.any?{|id| SUPPORT_STATES.include?(id)}
  515.             BattleVoice.play(:support_state, target)
  516.           end
  517.         end
  518.       end
  519.     end
  520.     display_affected_status_voice_plus(target, item)
  521.   end
  522. end

  523. class Scene_Battle < Scene_Base
  524.   #--------------------------------------------------------------------------
  525.   # ● 公開インスタンス変数
  526.   #--------------------------------------------------------------------------
  527.   attr_reader   :subject
  528.   #--------------------------------------------------------------------------
  529.   # ● スキル/アイテムの使用
  530.   #--------------------------------------------------------------------------
  531.   alias use_item_voice_plus use_item
  532.   def use_item
  533.     if @subject.current_action.attack?
  534.       BattleVoice.play(:attack, @subject)
  535.     elsif @subject.current_action.guard?
  536.       BattleVoice.play(:guard, @subject)
  537.     else
  538.       if @subject.current_action.item.play_voice?
  539.         case @subject.current_action.item
  540.         when RPG::Item
  541.           BattleVoice.play(:use_item, @subject)
  542.         when RPG::Skill
  543.           BattleVoice.play(:use_skill, @subject)
  544.         end
  545.       end
  546.     end
  547.     use_item_voice_plus
  548.   end
  549. end
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1