赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 2 |
经验 | 3113 |
最后登录 | 2021-4-6 |
在线时间 | 132 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 197
- 在线时间
- 132 小时
- 注册时间
- 2008-12-15
- 帖子
- 32
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
我战斗系统使用齿车之城的角色表情战斗脚本,这个脚本设定了各种战斗状况时角色会更换不同表情(实际上就是更换图片),由于我想如果能在更换图片时发出se(例如被打时放惨叫声),那效果就更好了,可惜不知是否作法会很复杂,我自己不是很懂rgss,因此若加入这个功能太难的话就想放弃,但若是小改就成的话就想做出来了,因此,想请各位看看这个脚本,看是否有可能实现。
脚本如下,我删了部分定义人物的,这部份只是定义各种人物取用的图片,我想和播放se的功能无关。
# バトルフェイスグラフィック(RTAB用) Ver 1.01
# 配布元・サポートURL
# http://members.jcom.home.ne.jp/cogwheel/
#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● 顔グラフィック設定
#--------------------------------------------------------------------------
def face_select(type)
# 顔グラフィック名により分岐
case @face_name
when "f1" # ファイター 1 の場合
# アクションタイプにより分岐
case type
when 0 # 待機の場合
return ""
when 1 # 瀕死の場合
return "_15"
when 2 # 防御の場合
return ""
when 3 # 暴走の場合
return "_10"
when 4 # 混乱の場合
return "_10"
when 10 # 攻撃の場合
return "_5"
when 11 # 回復の場合
return "_3"
when 20 # ダメージの場合
return "_7"
when 30 # 勝利の場合
return "_11"
when 40 # 呪文詠唱中の場合
return "_2"
when 41 # 特技詠唱中の場合
return "_3"
end
end
return ""
end
#--------------------------------------------------------------------------
# ● 顔グラフィック更新
#--------------------------------------------------------------------------
def face_update
# ディレイが掛かっている場合
@face_delay -= 1 if @face_delay > 0
# ダメージを受けた場合
if @hp != @battler.hp
# フェイス攻撃表示
if @hp > @battler.hp
@face_delay = 20
end
# HP を反映
@hp = @battler.hp
return
end
# アクション中の場合
if @battler.phase > 1
# フェイス攻撃表示
if @face_type != 10
# フェイスタイプを攻撃に設定
@face_type = 10
# アクションの種別で分岐
case @battler.current_action.kind
when 0 # 基本
# 攻撃の場合
if @battler.current_action.basic == 0
self.bitmap = RPG::Cache.face(@face_name + face_select(10))
end
when 1..2 # スキル、アイテム
# スコープの取得
if @battler.current_action.kind == 1
scope = $data_skills[@battler.current_action.skill_id].scope
else
scope = $data_items[@battler.current_action.item_id].scope
end
# 攻撃の場合
if scope < 3
self.bitmap = RPG::Cache.face(@face_name + face_select(10))
# 回復の場合
else
self.bitmap = RPG::Cache.face(@face_name + face_select(11))
end
end
end
return
end
# 戦闘に勝利した場合
if $scene.phase == 5
if @face_type != 30
# フェイスタイプを勝利に設定
@face_type = 30
self.bitmap = RPG::Cache.face(@face_name + face_select(30))
end
return
end
# 詠唱中の場合
if @battler.rtp > 0
if @face_type != 40
# フェイスタイプを詠唱に設定
@face_type = 40
# 呪文詠唱の場合
if $data_skills[@battler.current_action.skill_id].int_f > 0
self.bitmap = RPG::Cache.face(@face_name + face_select(40))
# スキル詠唱の場合
else
self.bitmap = RPG::Cache.face(@face_name + face_select(41))
end
end
return
end
# ダメージを受けている場合
if @face_delay > 0
if @face_type != 20
# フェイスタイプをダメージに設定
@face_type = 20
self.bitmap = RPG::Cache.face(@face_name + face_select(20))
end
return
end
# 防御中な
if @battler.guarding?
if @face_type != 2
@face_type = 2
self.bitmap = RPG::Cache.face(@face_name + face_select(2))
end
# 正常な場合
elsif @hp > @battler.maxhp/4 and @battler.movable? and @battler.inputable?
if @face_type != 0
@face_type = 0
self.bitmap = RPG::Cache.face(@face_name + face_select(0))
end
# 瀕死の場合
elsif @battler.inputable?
if @face_type != 1
@face_type = 1
self.bitmap = RPG::Cache.face(@face_name + face_select(1))
end
# 暴走の場合
else
# 暴走の場合
if @battler.restriction == 3
if @face_type != 3
@face_type = 3
self.bitmap = RPG::Cache.face(@face_name + face_select(3))
end
# 混乱の場合
else
if @face_type != 4
@face_type = 4
self.bitmap = RPG::Cache.face(@face_name + face_select(4))
end
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# ファイル名か色相が現在のものと異なる場合
if @battler.battler_name != @battler_name or
@battler.battler_hue != @battler_hue
# ビットマップを取得、設定
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
# フェイスグラフィックファイルが存在する場合
if @battler.is_a?(Game_Actor)
# キャラクターグラフィック名より、フェイスグラフィック名の検索
@face_name = RPG::Face.seek(@battler.character_name)
@face_name.sub!(/_\d+$/) { "" }
@face_type = 0
@face_delay = 0
@hp = @battler.hp
begin
# フェイスグラフィックを描画
self.bitmap = RPG::Cache.face(@face_name)
# フェイスグラフィックファイルが存在しない場合
rescue
@face_name = ""
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
end
# エネミーキャラの場合
else
@face_name = ""
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
end
@width = bitmap.width
@height = bitmap.height
self.ox = @width / 2
self.oy = @height + 16
if @battler.is_a?(Game_Enemy)
@battler.height = @height
end
# 戦闘不能または隠れ状態なら不透明度を 0 にする
if @battler.dead? or @battler.hidden
self.opacity = 0
end
@hp = @battler.hp
end
# 顔グラフィックの更新作業
face_update if @face_name != ""
# アニメーション ID が現在のものと異なる場合
if @battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# 表示されるべきアクターの場合
if @battler.is_a?(Game_Actor) and @battler_visible
# メインフェーズでないときは不透明度をやや下げる
if $game_temp.battle_main_phase
self.opacity += 3 if self.opacity < 255
else
self.opacity -= 3 if self.opacity > 207
end
end
# 明滅
if @battler.blink
blink_on
else
blink_off
end
# 不可視の場合
unless @battler_visible
# 出現
if not @battler.hidden and not @battler.dead? and
(@battler.damage.size < 2 or @battler.damage_pop.size < 2)
appear
@battler_visible = true
end
end
# ダメージ
for battler in @battler.damage_pop
if battler[0].class == Array
if battler[0][1] >= 0
$scene.skill_se
else
$scene.levelup_se
end
damage(@battler.damage[battler[0]], false, 2)
else
damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
end
if @battler.damage_sp.include?(battler[0])
damage(@battler.damage_sp[battler[0]],
@battler.critical[battler[0]], 1)
@battler.damage_sp.delete(battler[0])
end
@battler.damage_pop.delete(battler[0])
@battler.damage.delete(battler[0])
@battler.critical.delete(battler[0])
end
# 可視の場合
if @battler_visible
# 逃走
if @battler.hidden
$game_system.se_play($data_system.escape_se)
escape
@battler_visible = false
end
# 白フラッシュ
if @battler.white_flash
whiten
@battler.white_flash = false
end
# アニメーション
unless @battler.animation.empty?
for animation in @battler.animation.reverse
animation($data_animations[animation[0]], animation[1])
@battler.animation.delete(animation)
end
end
# コラプス
if @battler.damage.empty? and @battler.dead?
if $scene.dead_ok?(@battler)
if @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
else
$game_system.se_play($data_system.actor_collapse_se)
end
collapse
@battler_visible = false
end
end
end
# スプライトの座標を設定
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
if @battler.is_a?(Game_Enemy)
self.zoom_x = @battler.real_zoom * @battler.zoom
self.zoom_y = @battler.real_zoom * @battler.zoom
end
end
end
class Scene_Battle
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :phase # バトルフェーズ
end
|
|