bS LATERALE
Iniziato da
Zen
, set 16 2007 11:25
20 risposte a questa discussione
#1
Inviato 16 settembre 2007 - 11:25
Salve a tutti,mi servirebbe il bs laterale che c'era nel vecchio forum in cui quanto si effettuava un attacco veniva mostrato l'icona dell'arma!!!
Grazie!!!
Grazie!!!
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#2
Inviato 16 settembre 2007 - 11:34
Eccolo:
CODICE
#--------------------------------------------------------------------------
# ☆サイドビュー 簡易版
#
# Side View Battle Ver 1.03
#--------------------------------------------------------------------------
# サイドビュー戦闘スクリプト歩行グラフィック版 ☆Special Thanks by 吹雪
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# グラフィックファイルの規格
#--------------------------------------------------------------------------
# バトラーグラフィック
#
# 歩行グラフィックをそのまま使います。
#
# 武器グラフィック
#
# 武器のアイコングラフィックをそのまま使います。
#
module Side_view
#--------------------------------------------------------------------------
# ● RTAB併用フラッグ ☆自動認識
# Scene_Battle に メソッド synthe? があるかどうかで認識
# 自動認識したくない場合は書き換えてください。
#--------------------------------------------------------------------------
if Scene_Battle.method_defined?("synthe?")
RTAB = true
else
RTAB = false
end
#--------------------------------------------------------------------------
# ● RTABのカメラワークを使う場合の描画位置 誤差修正 ☆自動認識
# 自動認識したくない場合は書き換えてください。
#--------------------------------------------------------------------------
def camera_correctness
return false if !RTAB
begin
return $scene.drive
rescue
return false
end
end
#--------------------------------------------------------------------------
# ● パーティの最大人数 (あくまでもスプライトを増やすだけのもの)
#--------------------------------------------------------------------------
Party_max = 4
#--------------------------------------------------------------------------
# ● バトラーグラフィックの拡大率(アクター専用)
#--------------------------------------------------------------------------
CHAR_ZOOM = 1.2
#--------------------------------------------------------------------------
# ● アローカーソル位置補正
#--------------------------------------------------------------------------
ARROW_OX = 0
ARROW_OY = 64
#--------------------------------------------------------------------------
# ● 飛行として扱うステート名配列
#--------------------------------------------------------------------------
FLY_STATES = ["飛行"]
#--------------------------------------------------------------------------
# ● 戦闘画面パーティの位置
#--------------------------------------------------------------------------
PARTY_X = 480 # パーティの X 位置
PARTY_Y = 120 # パーティの Y 位置
FORMATION_X = 32 # 各アクター同士の間隔 X
FORMATION_Y = 48 # 各アクター同士の間隔 Y
#--------------------------------------------------------------------------
# ● カスタマイズ定数
#--------------------------------------------------------------------------
NORMAL = "NORMAL"
WALK_R = "WALK_R"
WALK_L = "WALK_L"
ATTACK = "ATTACK"
ATTACK_R = "ATTACK_R"
ATTACK_L = "ATTACK_L"
MAGIC = "MAGIC"
ITEM = "ITEM"
# アニメの設定
ANIME = {
# [画像ID,ループするか,アニメスピード,武器表示するか,アニメさせない,武器グラ右手or左手]
NORMAL => [1,true , 0,false, true ,"" ], # 通常待機
WALK_R => [2,true , 6,false, false,"" ], # 右移動
WALK_L => [1,true , 6,false, false,"" ], # 左移動
ATTACK_R => [1,false, 6,true , false,"右手"], # 右手攻撃
ATTACK_L => [1,false, 6,true , false,"左手"], # 左手攻撃
MAGIC => [1,false, 6,false, false,"" ], # 右手攻撃
ITEM => [1,false, 6,false, false,"" ], # 左手攻撃
}
# デフォルト値の設定
ANIME.default = [1,false,12,false,"",""]
# アクション設定の関連付け
ACTION_LIB = {
"移動" => "moving_setup",
"アクターアニメ実行" => "action",
"遠距離アニメ" => "flying",
"アクターアニメ変更" => "change",
"行動アニメ" => "animation1",
"対象アニメ" => "animation2",
"ウエイト" => "wait",
"左右反転" => "reverse",
"閃きアニメ" => "flash",
"残像表示" => "shadow_on",
"残像消去" => "shadow_off",
"アクターアニメ固定" => "freeze",
"アニメ固定解除" => "freeze_lifting",
"アニメーションの表示" => "animation_start",
"SEの演奏" => "play_se",
}
ACTION_LIB.default = "finish"
# アクション設定のときに 右手攻撃 or 左手攻撃 を判別するANIME
# "アクターアニメ変更#ATTACK"としたときにATTACK_RまたはATTACK_Lを判別する
DUAL_WEAPONS_ANIME = [ATTACK]
#バトラーアニメーションパターン数(ここを間違えると正常にアイコンが動きません)
ANIME_PATARN = 3
#武器表示X座標
BLZ_X = {
# X 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
0=>[0,0,0,0], # アニメなし
1=>[2,2,2,2], # 振り下ろし
2=>[15,10,0,0], # 突き
3=>[2,2,2,2], # 振り上げ
4=>[0,0,3,3], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#武器表示Y座標
BLZ_Y = {
# Y 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
0=>[0,0,0,0], # アニメなし
1=>[6,6,6,6], # 振り下ろし
2=>[6,6,6,6], # 突き
3=>[6,6,6,6], # 振り上げ
4=>[8,8,8,8], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#武器表示角度
BLZ_ANGLE = {
# Y 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
# 別に 式 を使わなくて定数でもよいが使ったほうがわかりやすいかも?
0=>[0,0,0,0], # アニメなし
1=>[75-45*3,75-45*2,75-45*1,75-45*1], # 振り下ろし
2=>[45,45,45,45], # 突き
3=>[100-45*1,100-45*2,100-45*3,00-45*4], # 振り上げ
4=>[45,45,45,45], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#--------------------------------------------------------------------------
# ● シェイクの設定
#--------------------------------------------------------------------------
SHAKE_FILE = "シェイク" # ファイル名
SHAKE_POWER = 5 # 強さ
SHAKE_SPEED = 5 # 速さ
SHAKE_DURATION = 5 # 時間
#--------------------------------------------------------------------------
# ● 上下反転の設定
#--------------------------------------------------------------------------
UPSIDE_DOWN_FILE = "上下反転" # ファイル名
#--------------------------------------------------------------------------
# ● 左右反転の設定
#--------------------------------------------------------------------------
REVERSE_FILE = "左右反転" # ファイル名
#--------------------------------------------------------------------------
# ● 回転の設定
#--------------------------------------------------------------------------
TURNING_FILE = "回転" # ファイル名
TURNING_DIRECTION = 1 # 方向(1.反時計回り,-1.時計回り)
TURNING_SPEED = 40 # 速さ
TURNING_DURATION = 1 # 回転数
#--------------------------------------------------------------------------
# ● 移動の設定
#--------------------------------------------------------------------------
MOVE_FILE = "移動" # ファイル名
MOVE_RETURN = 1 # 元の位置に戻るか?
MOVE_SPEED = 32 # 速さ
MOVE_COORDINATES = [0,-640] # 元の位置からの相対座標
#--------------------------------------------------------------------------
# ● アニメ追加の設定
#--------------------------------------------------------------------------
ADD_ANIME_FILE = "アニメ追加" # ファイル名
ADD_ANIME_ID = 0 # アニメーションID
#--------------------------------------------------------------------------
# ● デフォルトとRTABのデータ変換
#--------------------------------------------------------------------------
def convert_battler
return RTAB ? @active_actor : @active_battler
end
#--------------------------------------------------------------------------
# ● デフォルトとRTABのデータ変換2
#--------------------------------------------------------------------------
def convert_battler2(*arg)
return RTAB ? arg[0] : @active_battler
end
end
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
module BattleActions
# 下のものはあくまでも一例なので
# 独自に作ってください。
Actions = {
"通常攻撃" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#target,32,0,64,0",
"アクターアニメ変更#NORMAL",
"ウエイト#5",
"アクターアニメ変更#ATTACK",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"SEの演奏#016-Jump02,80,100",
"移動#self,0,0,48,5",
"終了"
],
"エネミー攻撃" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-36,0,12,0",
"アクターアニメ変更#NORMAL",
"ウエイト#5",
"アクターアニメ変更#ATTACK",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,12,0",
"終了"
],
"術発動" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-32,0,4,0",
"アクターアニメ変更#MAGIC",
"ウエイト#15",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,4,2",
"終了"
],
"アイテム使用" => [
"閃きアニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-32,0,4,0",
"行動アニメ",
"アクターアニメ変更#ITEM",
"ウエイト#15",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,4,2",
"終了"
],
"払い抜け" => [
"閃きアニメ",
"アクターアニメ変更#WALK_L",
"移動#target_near,50,0,48,6",
"左右反転",
"アクターアニメ固定#ATTACK#3",
"行動アニメ",
"SEの演奏#135-Light01,100,100",
"アニメーションの表示#self,42",
"ウエイト#15",
"左右反転",
"残像表示",
"移動#target_far,-50,0,48,0",
"対象アニメ",
"残像消去",
"アニメ固定解除",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,48,1,0",
"終了"
],
} # ここで終わり 消さないでください
end
module RPG
class Weapon
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
case @id
when 1 # ブロンズソード
return BattleActions::Actions["通常攻撃"]
end
return BattleActions::Actions["通常攻撃"] # デフォルト値
end
end
class Skill
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
if self.magic?
return BattleActions::Actions["術発動"] # デフォルト値
else
return BattleActions::Actions["払い抜け"] # デフォルト値
end
end
end
class Item
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
return BattleActions::Actions["アイテム使用"] # デフォルト値
end
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
return BattleActions::Actions["エネミー攻撃"] # デフォルト値
end
end
module RPG
=begin
☆ 説明
アイコン武器の動き方の設定です。
module Side_view の BLZ_X, BLZ_Y, BLZ_ANGLE が参照されます。
あくまでも動き方の設定なので画像はアイコンが使われます。
● カスタマイズ方法
1、データベースからの設定(初級者向け)
武器アニメ属性を作り、それを武器へつけます。
例 武器アニメ1 数字は半角で、スペースは開けない
2、スクリプトからの設定(中級者向け)
case @id
when 1,2,3,4
return 1
when 5,6,7,8
return 2
end
return 0
のように描くとID別に指定可能です。
その他にも、条件分岐などをいれて設定しても良いです。
例えば、属性ID50を持っているときは、アニメ1としたいなら
if @element_set.include?(50)
return 1
end
とします。
1、のデータベースからの設定を使わない場合
element_name = "武器アニメ"
for i in @element_set
if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
return $1.to_i
end
end
の部分は削除してもかまいません
=end
class Weapon
#--------------------------------------------------------------------------
# ● 武器アニメーション
#--------------------------------------------------------------------------
def anime
# 属性取得用
element_name = "武器アニメ"
for i in @element_set
if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
return $1.to_i
end
end
# カスタマイズ設定 ID 指定
case @id
when 1,2,3,4
return 1
when 5,6,7,8
return 2
end
return 1 # デフォルト値
end
end
end
=begin
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
☆ 説明
行動者から対象者にアニメを飛ばします。
飛ばすアニメを データベース‐アニメーション で作ります。
[アニメーションID, スピード, 往復するか?,直線(false)or曲線(true)] で指定します。
● カスタマイズ方法
case @id
when 17,18,19,20
return [101,32,false,false]
when 21,22,23,24
return [102,32,false,false]
end
return 0
のように描くとID別に指定可能です。
● アニメーションID
飛ばすアニメーションIDです。短い場合は繰り返しで表示されます。
● スピード
大きいほうが早い(0だとアニメは移動しません)
1 = 1フレームで1ドット進むと考えてください。
● 往復するか?
true とした場合、ブーメランのようにアニメが戻ります。
● 直線(false)or曲線(true)
true = 対象に向かって曲線で、アニメが飛びます。(修正の余地ありですが・・・)
false = 対象に向かって直線で、アニメが飛びます。
=end
module RPG
class Weapon
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
# ID 指定 の例
#case @id
#when 34 # ブーメランっぽいやつ
# return [103,32,true,true]
#when 17,18,19,20
# return [101,32,false,false]
#when 21,22,23,24
# return [102,32,false,false]
#end
return [0,0,false,false] # デフォルト値
end
end
class Skill
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
class Item
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include Side_view
#--------------------------------------------------------------------------
# ● 追加・公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :height # 画像の高さ
attr_accessor :real_x # X座標補正
attr_accessor :real_y # Y座標補正
attr_accessor :real_zoom # 拡大率
attr_accessor :wait_count # アニメーション 待ち時間
attr_accessor :wait_count2 # アニメーション 待ち時間2
attr_accessor :pattern # アニメーション カウント(キャラ)
attr_accessor :shake # シェイク開始フラッグ
attr_accessor :reverse # 左右反転フラッグ
attr_accessor :shadow # 残像フラッグ
attr_accessor :flash_flag # 閃きフラッグ
attr_reader :ox # X座標補正
attr_reader :oy # Y座標補正
attr_reader :flying_x # 遠距離アニメX座標
attr_reader :flying_y # 遠距離アニメY座標
attr_reader :flying_anime # 遠距離アニメ
attr_reader :animation1_on # 行動アニメ開始フラッグ
attr_reader :animation2_on # 対象アニメ開始フラッグ
#--------------------------------------------------------------------------
# ● デフォルトのアニメーション待ち時間を取得
#--------------------------------------------------------------------------
def animation_duration=(animation_duration)
@_animation_duration = animation_duration
end
#--------------------------------------------------------------------------
# ● バトル開始時のセットアップ
#--------------------------------------------------------------------------
def start_battle
@height = 0
@real_x = 0
@real_y = 0
@real_zoom = 1.0
@battler_condition = ""
@action = nil
@battle_actions = []
@battler_action = false
@step = 0
@anime_on = false
@wait_count = 0
@wait_count2 = 0
@ox = 0
@oy = 0
@pattern = 0
@pattern_log = true
@pattern_freeze = false
@condition_freeze = false
@active = false
@move_distance = nil
@move_wait = 0
@move_coordinates = [0,0,0,0]
@flying_distance = nil
@flying_wait = 0
@flying_x = 0
@flying_y = 0
@flash_flag = {}
self.flying_clear
end
#--------------------------------------------------------------------------
# ● 移動中判定
#--------------------------------------------------------------------------
def moving?
# X座標補正または、Y座標補正が0でなければ、移動中
return (@ox != 0 or @oy != 0)
end
#--------------------------------------------------------------------------
# ● 移動終了判定
#--------------------------------------------------------------------------
def move_end?
return (@ox == @move_coordinates[0] and @oy == @move_coordinates[1])
end
#--------------------------------------------------------------------------
# ● アクション開始設定
#--------------------------------------------------------------------------
def action(flag = true)
@battler_action = flag
@animation1_on = false
@animation2_on = false
@step = "setup"
end
#--------------------------------------------------------------------------
# ● アクション中判定
#--------------------------------------------------------------------------
def action?
return @battler_action
end
#--------------------------------------------------------------------------
# ● 閃き判定
#--------------------------------------------------------------------------
def flash?
return @flash_flg
end
#--------------------------------------------------------------------------
# ● 戦闘不能判定
#--------------------------------------------------------------------------
def anime_dead?
if $game_temp.in_battle and !RTAB
if [2,3,4,5].include?($scene.phase4_step)
return @last_dead
end
end
return @last_dead = self.dead?
end
#--------------------------------------------------------------------------
# ● ピンチ状態判定
#--------------------------------------------------------------------------
def crisis?
if $game_temp.in_battle and !RTAB
if [2,3,4,5].include?($scene.phase4_step)
return @last_crisis
end
end
return @last_crisis = (self.hp <= self.maxhp / 4 or badstate?)
end
#--------------------------------------------------------------------------
# ● バッドステート判定
#--------------------------------------------------------------------------
def badstate?
for i in @states
unless $data_states[i].nonresistance
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ● 飛行
#--------------------------------------------------------------------------
def fly
if @fly != nil
return @fly
end
for id in @states
if FLY_STATES.include?($data_states[id].name)
return 60
end
end
return 0
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ目標座標の計算
#--------------------------------------------------------------------------
def flying_setup
# 二度目は実行しない
return if @flying_distance != nil && !camera_correctness
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
# 目的座標を計算
@f_target_x = 0
@f_target_y = 0
for t in targets
@f_target_x += t.screen_x
@f_target_y += t.screen_y
end
if targets != []
@f_target_x /= targets.size
@f_target_y /= targets.size
else
@flying_distance = 0
return
end
# 距離の計算
@flying_distance = (self.screen_x - @f_target_x).abs + (self.screen_y - @f_target_y).abs
@flying_end = false
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ
#--------------------------------------------------------------------------
def flying_animation
# 戻る
if @step != "flying" or @flying_distance.nil?
return [false,true]
end
# あらかじめ計算
self_x = self.screen_x
self_y = self.screen_y
@flying_distance = @flying_distance == 0 ? 1 : @flying_distance
n1 = @flying_wait / @flying_distance.to_f
if @flying_distance - @flying_wait > @flying_distance / 2
n2 = 1.0 + 10.0 * @flying_wait / @flying_distance.to_f
else
n2 = 1.0 + 10.0 * (@flying_distance - @flying_wait) / @flying_distance.to_f
end
if !@flying_anime[4]
# 直線移動
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1).to_i
else
# 曲線移動
if !@flying_proceed_end
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1 - n2**2).to_i
else
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1 + n2**2).to_i
end
end
# 座標代入
@flying_x = x
@flying_y = y
# ウエイト
if !@flying_proceed_end
# 開始
@flying_proceed_start = @flying_wait == 0
@flying_wait += @flying_anime[1]
@flying_wait = [@flying_wait,@flying_distance].min
@flying_proceed_end = @flying_wait == @flying_distance
else
# 開始
@flying_return_start = @flying_wait == @flying_distance
@flying_wait -= @flying_anime[1]
@flying_wait = [@flying_wait,0].max
@flying_return_end = @flying_wait == 0
end
if @flying_anime[1] == 0
@flying_end = true
elsif !@flying_anime[2]
@flying_end = @flying_proceed_end
else
@flying_end = @flying_return_end
end
# 値を返す(アニメ開始,アニメ終了)
return [@flying_proceed_start,@flying_end]
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ初期化
#--------------------------------------------------------------------------
def flying_clear
@flying_proceed_start = false
@flying_proceed_end = false
@flying_return_start = false
@flying_return_end = false
@flying_end = true
@flying_anime = [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 移動
#--------------------------------------------------------------------------
def move
# 距離の計算
@move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
if @move_distance > 0
return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
array = @move_coordinates
# ジャンプ補正値の計算
n = 100.0 * @move_wait / @move_distance
jump = -@move_action[4] * n * (100 - n) / 100.0
@ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
@oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
# ウエイト
@move_wait -= @move_action[3]
@move_wait = [@move_wait,0].max
end
end
#--------------------------------------------------------------------------
# ● 移動アクションの取得
#--------------------------------------------------------------------------
def get_move_action
string = @action.split(/#/)[1]
string = string.split(/,/)
@move_action = [string[0],string[1].to_i,string[2].to_i,string[3].to_i,string[4].to_i,string[5].to_i]
end
#--------------------------------------------------------------------------
# ● アクションの取得
#--------------------------------------------------------------------------
def get_step
if @action.nil?
@step = "finish"
return
end
return ACTION_LIB[@action.split(/#/)[0]]
end
#--------------------------------------------------------------------------
# ● フレーム更新 (次のアクションへ)
#--------------------------------------------------------------------------
def update_next
@action = @battle_actions.shift
@step = get_step
end
#--------------------------------------------------------------------------
# ● フレーム更新 (動作取得)
#--------------------------------------------------------------------------
def update_setup
# アクションの取得
self.get_actions
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (移動取得)
#--------------------------------------------------------------------------
def update_moving_setup
# 移動アクションの取得
self.get_move_action
# 移動目標の設定
self.move_setup
@step = "moving"
end
#--------------------------------------------------------------------------
# ● フレーム更新 (移動)
#--------------------------------------------------------------------------
def update_moving
# 移動
self.move
self.condition = @battler_condition
# 移動完了したら次のステップへ
if move_end?
update_next
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメ実行)
#--------------------------------------------------------------------------
def update_action
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
# ループか否か
if !ANIME[@battler_condition][1]
self.anime_on
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (遠距離アニメ)
#--------------------------------------------------------------------------
def update_flying
# 目標の設定
self.flying_setup
# 遠距離アニメ終了
if @flying_end or @flying_anime == [0,0,false,false]
self.flying_clear
update_next
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメ変更)
#--------------------------------------------------------------------------
def update_change
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
# ループか否か
if !ANIME[@battler_condition][1]
self.anime_on
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (行動アニメ)
#--------------------------------------------------------------------------
def update_animation1
@animation1_on = true
# 行動アニメの後に行動を開始する
if $scene.phase4_step == 3
id = RTAB ? @anime1 : $scene.animation1_id
animation = $data_animations[id]
frame_max = animation != nil ? animation.frame_max : 0
@wait_count2 = frame_max * 2
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (対象アニメ)
#--------------------------------------------------------------------------
def update_animation2
@animation2_on = true
# 行動アニメの後に行動を開始する
if $scene.phase4_step == 4
id = RTAB ? @anime2 : $scene.animation2_id
animation = $data_animations[id]
frame_max = animation != nil ? animation.frame_max : 0
@wait_count2 = frame_max * 2
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ウエイト)
#--------------------------------------------------------------------------
def update_wait
@wait_count2 = @action.split(/#/)[1].to_i
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (残像表示)
#--------------------------------------------------------------------------
def update_shadow_on
@shadow = true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (残像消去)
#--------------------------------------------------------------------------
def update_shadow_off
@shadow = false
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (左右反転)
#--------------------------------------------------------------------------
def update_reverse
@reverse = @reverse ? false : true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (閃きアニメ)
#--------------------------------------------------------------------------
def update_flash
# 閃きアニメの後に行動を開始する
if @flash_flag["normal"]
@wait_count = $scene.flash_duration
@flash_flag["normal"] = false
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (SEの演奏)
#--------------------------------------------------------------------------
def update_play_se
data = @action.split(/#/)[1]
data = data.split(/,/)
# SE を演奏
Audio.se_play("Audio/SE/" + data[0], data[1].to_i, data[2].to_i)
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アクターアニメ固定)
#--------------------------------------------------------------------------
def update_freeze
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
@pattern = @action.split(/#/)[2].to_i
@pattern_freeze = true
@condition_freeze = true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アクターアニメ固定解除)
#--------------------------------------------------------------------------
def update_freeze_lifting
@pattern_freeze = false
@condition_freeze = false
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメーションの表示)
#--------------------------------------------------------------------------
def update_animation_start
data = @action.split(/#/)[1]
data = data.split(/,/)
target = data[0]
animation_id = data[1].to_i
if RTAB
case target
when "self"
@animation.push([animation_id,true])
when "target"
for tar in @target
tar.animation.push([animation_id, true])
end
end
else
case target
when "self"
@animation_id = animation_id
@animation_hit = true
when "target"
for tar in $scene.target_battlers
tar.animation_id = animation_id
tar.animation_hit = true
end
end
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (動作終了)
#--------------------------------------------------------------------------
def update_finish
# 動作終了
@battler_action = false
@step = "setup"
end
#--------------------------------------------------------------------------
# ● バトラーの状態(バトラーグラフィックのタイプ)
#--------------------------------------------------------------------------
def condition
return @battler_condition
end
#--------------------------------------------------------------------------
# ● バトラーの状態 変更(バトラーグラフィックのタイプ)
#--------------------------------------------------------------------------
def condition=(condition)
return if @condition_freeze
if @battler_condition != condition
@wait_count = ANIME[condition][2]
@pattern = 0
end
@battler_condition = condition
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウェイト中の場合
if @wait_count == 0
# パターン更新
self.char_animation
@wait_count = ANIME[@battler_condition][2]
end
# パターン更新
self.char_animation
# ウェイト中の場合
if @wait_count2 > 0
return
end
# 行動アニメーション
if @battler_action
method("update_" + @step).call
return
end
# データ初期化
@animation1_on = false
@animation2_on = false
@action = nil
@battle_actions = []
@move_wait = 0
@move_distance = nil
@flying_wait = 0
@flying_distance = nil
@flash = false
# 通常・待機
return self.condition = NORMAL
end
#--------------------------------------------------------------------------
# ● アクションの取得
#--------------------------------------------------------------------------
def get_actions
skill = $data_skills[self.current_action.skill_id]
item = $data_items[self.current_action.item_id]
kind = self.current_action.kind
# 動作取得
@battle_actions = []
# スキル
if skill != nil && kind == 1
@battle_actions = skill.battle_actions.dup
@flying_anime = skill.flying_anime
# アイテム
elsif item != nil && kind == 2
@battle_actions = item.battle_actions.dup
@flying_anime = item.flying_anime
# 左手攻撃
elsif !@first_weapon and @second_weapon and self.is_a?(Game_Actor)
@battle_actions = self.battle_actions2.dup
@flying_anime = self.flying_anime2
# 右手攻撃
elsif self.current_action.basic == 0 and
self.is_a?(Game_Actor) and self.current_action.kind == 0
@battle_actions = self.battle_actions1.dup
@flying_anime = self.flying_anime1
# 通常攻撃
elsif self.current_action.basic == 0 and self.current_action.kind == 0
@battle_actions = self.battle_actions.dup
@flying_anime = self.flying_anime
else
@battle_actions = ["終了"]
@flying_anime = [0,0,false,false]
end
end
#--------------------------------------------------------------------------
# ● ループしないアニメのセット
#--------------------------------------------------------------------------
def anime_on
@pattern = 0
@pattern_log = true
return
end
#--------------------------------------------------------------------------
# ● パターン更新
#--------------------------------------------------------------------------
def char_animation
# パタン固定の場合もどる
return if @pattern_freeze
# ループしないアニメの場合 1234 で止まる
if !ANIME[@battler_condition][1] && @pattern == 3
return
end
# アニメさせない場合 1 で止まる
if ANIME[@battler_condition][4]
@pattern = 0
return
end
@pattern = (@pattern + 1) % 4
end
#--------------------------------------------------------------------------
# ● アニメタイプ
#--------------------------------------------------------------------------
def anime_type
return ANIME[@battler_condition] != nil ? ANIME[@battler_condition][0] : 0
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
include Side_view
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias side_view_setup setup
def setup(actor_id)
side_view_setup(actor_id)
start_battle
end
#--------------------------------------------------------------------------
# ● 二刀武器のID取得 ※エラー回避用
#--------------------------------------------------------------------------
def weapon2_id
return @weapon2_id != nil ? @weapon2_id : 0
end
#--------------------------------------------------------------------------
# ● X方向 ポジション 取得
#--------------------------------------------------------------------------
def position
return $data_classes[@class_id].position
end
#--------------------------------------------------------------------------
# ● Y方向 ポジション 取得
#--------------------------------------------------------------------------
def position2
return self.index
end
#--------------------------------------------------------------------------
# ● 武器アニメタイプ
#--------------------------------------------------------------------------
def weapon_anime_type(type = @battler_condition)
file_name = weapon_anime_type0(type)
visible = weapon_anime_type1(type)
z = weapon_anime_type2(type)
motion = weapon_anime_type3(type)
return [file_name,visible,z,motion]
end
# 武器アイコン取得
def weapon_anime_type0(type = @battler_condition)
type = ANIME[type][5]
return weapon_anime1 if type == "右手"
return weapon_anime2 if type == "左手"
return nil
end
# 表示・非表示の取得
def weapon_anime_type1(type = @battler_condition)
return ANIME[type][3]
end
# バトラーより上に表示するかどうか
def weapon_anime_type2(type = @battler_condition)
type = ANIME[type][5]
return true if type == "左手"
return false
end
# 武器の動作No.取得
def weapon_anime_type3(type = @battler_condition)
type = ANIME[type][5]
return extend_weapon_anime1 if type == "右手"
return extend_weapon_anime2 if type == "左手"
return 0
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_x
return PARTY_X + position * FORMATION_X + @ox
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_y
# パーティ内の並び順から Y 座標を計算して返す
if self.index != nil
y = position2 * FORMATION_Y + PARTY_Y + @oy - @height / 2
return y
else
return 0
end
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x(true_x = self.true_x)
return 320 + (true_x - 320) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y(true_y = self.true_y)
return true_y * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 Z 座標の取得
#--------------------------------------------------------------------------
def screen_z
return screen_y + 1000
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_x
return 320 + (true_x - @ox - 320) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def base_y
return (true_y - @oy) * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 拡大率の取得
#--------------------------------------------------------------------------
def zoom
return ($scene.zoom_rate[1] - $scene.zoom_rate[0]) *
(true_x + @fly) / 480 + $scene.zoom_rate[0]
end
#--------------------------------------------------------------------------
# ● 攻撃用、バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def attack_x(z)
return (320 - true_x) * z * 0.75
end
#--------------------------------------------------------------------------
# ● 攻撃用、バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def attack_y(z)
return (160 - (true_y + fly / 4) * z + @height * zoom * z / 2) * 0.75
end
#--------------------------------------------------------------------------
# ● 閃き待ち時間
#--------------------------------------------------------------------------
def flash_duration
return $scene.flash_duration
end
#--------------------------------------------------------------------------
# ● アニメーション取得
#--------------------------------------------------------------------------
def battle_actions1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
end
#--------------------------------------------------------------------------
# ● アニメーション取得
#--------------------------------------------------------------------------
def battle_actions2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
end
#--------------------------------------------------------------------------
# ● 武器アニメーション 動き方 取得
#--------------------------------------------------------------------------
def extend_weapon_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.anime : 0
end
#--------------------------------------------------------------------------
# ● 武器アニメーション 動き方 取得
#--------------------------------------------------------------------------
def extend_weapon_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.anime : 0
end
#--------------------------------------------------------------------------
# ● 武器アニメーション取得
#--------------------------------------------------------------------------
def weapon_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.icon_name : ""
end
#--------------------------------------------------------------------------
# ● 武器アニメーション取得
#--------------------------------------------------------------------------
def weapon_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.icon_name : ""
end
#--------------------------------------------------------------------------
# ● 遠距離アニメーション取得
#--------------------------------------------------------------------------
def flying_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.flying_anime : [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 遠距離アニメーション取得
#--------------------------------------------------------------------------
def flying_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.flying_anime : [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 移動目標座標の計算
#--------------------------------------------------------------------------
def move_setup
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
case @move_action[0]
when "self" # 自分
@target_x = self.base_x
@target_y = self.base_y
when "target_near" # 一番近くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
targets.reverse!
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target_far" # 一番遠くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target" # ターゲット中央
@target_x = 0
@target_y = 0
for t in targets
@target_x += t.screen_x
@target_y += t.screen_y
end
if targets != []
@target_x /= targets.size
@target_y /= targets.size
end
when "troop" # "トループ中央"
@target_x = 0
@target_y = 0
for t in $game_troop.enemies
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_troop.enemies != []
@target_x /= $game_troop.enemies.size
@target_y /= $game_troop.enemies.size
end
when "party" # "パーティ中央"
@target_x = 0
@target_y = 0
for t in $game_party.actors
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_party.actors != []
@target_x /= $game_party.actors.size
@target_y /= $game_party.actors.size
end
when "screen" # "画面"
@target_x = self.base_x
@target_y = self.base_y
end
# 補正
@target_x += @move_action[1] - self.base_x
@target_y += @move_action[2] - self.base_y
# 移動目標の座標をセット
@move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
# 距離の計算(ウエイトの設定)
@move_wait = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias side_view_initialize initialize
def initialize(troop_id, member_index)
side_view_initialize(troop_id, member_index)
start_battle
end
#--------------------------------------------------------------------------
# ● 移動
#--------------------------------------------------------------------------
def move
# 距離の計算
@move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
if @move_distance > 0
return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
array = @move_coordinates
# ジャンプ補正値の計算
n = 100.0 * @move_wait / @move_distance
jump = -@move_action[4] * n * (100 - n) / 100.0
@ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
@oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
# ウエイト
@move_wait -= @move_action[3]
@move_wait = [@move_wait,0].max
end
end
#--------------------------------------------------------------------------
# ● 移動目標座標の計算
#--------------------------------------------------------------------------
def move_setup
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
case @move_action[0]
when "self" # 自分
@target_x = self.base_x
@target_y = self.base_y
when "target_near" # 一番近くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target_far" # 一番遠くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
targets.reverse!
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target" # ターゲット中央
@target_x = 0
@target_y = 0
for t in targets
@target_x += t.screen_x
@target_y += t.screen_y
end
if targets != []
@target_x /= targets.size
@target_y /= targets.size
end
when "party" # "トループ中央"
@target_x = 0
@target_y = 0
for t in $game_troop.enemies
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_troop.enemies != []
@target_x /= $game_troop.enemies.size
@target_y /= $game_troop.enemies.size
end
when "troop" # "パーティ中央"
@target_x = 0
@target_y = 0
for t in $game_party.actors
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_party.actors != []
@target_x /= $game_party.actors.size
@target_y /= $game_party.actors.size
end
when "screen" # "画面"
@target_x = self.base_x
@target_y = self.base_y
end
# 補正
@target_x -= @move_action[1] + self.base_x
@target_y -= @move_action[2] + self.base_y
# 移動目標の座標をセット
@move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
# 距離の計算(ウエイトの設定)
@move_wait = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
end
if RTAB
alias original_x true_x
alias original_y true_y
else
alias original_x screen_x
alias original_y screen_y
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_x
return original_x + @ox
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_y
return original_y - @height / 2 + @oy
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x(true_x = self.true_x)
return true_x * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y(true_y = self.true_y)
return true_y * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_x(true_x = self.true_x)
return (true_x - @ox) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_y(true_y = self.true_y)
return (true_y - @oy) * @real_zoom + @real_y
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アクターを加える
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias side_view_add_actor add_actor
def add_actor(actor_id)
# アクターを取得
actor = $game_actors[actor_id]
# サイドビューデータの初期化
actor.start_battle
# 戻す
side_view_add_actor(actor_id)
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
include Side_view
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :phase # フェーズ
attr_reader :phase4_step # フェーズ4ステップ
attr_reader :active_battler # 対象の配列
attr_reader :target_battlers # 対象の配列
attr_reader :animation1_id # 行動アニメID
attr_reader :animation2_id # 対象アニメID
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias side_view_main main
def main
# バトラー初期化
for battler in $game_party.actors + $game_troop.enemies
battler.start_battle
end
# 戻す
side_view_main
end
#--------------------------------------------------------------------------
# ● 閃き判定
#--------------------------------------------------------------------------
def flash?
return @flash_flag ? true : false
end
#--------------------------------------------------------------------------
# ● 閃きアニメ待ち時間取得
#--------------------------------------------------------------------------
def flash_duration
animation = nil
if FLASH_ANIME
animation = $data_animations[FLASH_ANIMATION_ID]
end
return animation != nil ? animation.frame_max * 2 + 2 : 0
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step2 update_phase4_step2
def update_phase4_step2(*arg)
battler = convert_battler2(*arg)
battler.action
side_view_update_phase4_step2(*arg)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step3 update_phase4_step3
def update_phase4_step3(*arg)
battler = convert_battler2(*arg)
return if !battler.animation1_on and battler.action? and !battler.flash?
if battler.flash? and FLASH_ANIME
battler.flash_flag["normal"] = true
end
side_view_update_phase4_step3(*arg)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step4 update_phase4_step4
def update_phase4_step4(*arg)
battler = convert_battler2(*arg)
targets = RTAB ? battler.target : @target_battlers
return if !battler.animation2_on and battler.action?
side_view_update_phase4_step4(*arg)
for target in targets
if RTAB
value = nil
if target.damage_sp.include?(battler)
value = target.damage_sp[battler]
end
if target.damage.include?(battler)
if value == nil or value == "Miss"
value = target.damage[battler]
elsif value.is_a?(Numeric) && value > 0
value = target.damage[battler] == "Miss" ? value : target.damage[battler]
end
end
else
value = target.damage
end
if target.is_a?(Game_Actor)
# ダメージの場合
if value.is_a?(Numeric) && value > 0
# シェイクを開始
target.shake = true
end
elsif target.is_a?(Game_Enemy)
# ダメージの場合
if value.is_a?(Numeric) && value > 0
# シェイクを開始
target.shake = true
end
end
end
end
#--------------------------------------------------------------------------
# ● プレバトルフェーズ開始
#--------------------------------------------------------------------------
alias start_phase1_correct start_phase1
def start_phase1
# カメラの設定
# 元々フロントビュー向けの数値になっているため
@zoom_rate = [1.0, 1.0]
start_phase1_correct
end
#--------------------------------------------------------------------------
# ● アクターコマンドフェーズ開始
#--------------------------------------------------------------------------
alias start_phase3_correct start_phase3
def start_phase3
battler = convert_battler
start_phase3_correct
if RTAB
# カメラの設定
# 元々フロントビュー向けの数値になっているため
@camera = "command"
@spriteset.screen_target(0, 0, 1.0)
end
end
end
class Spriteset_Battle
include Side_view
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias side_veiw_initialize initialize
def initialize
side_veiw_initialize
# アクタースプライトを解放
for sprite in @actor_sprites
sprite.dispose
end
# アクタースプライトを作成
@actor_sprites = []
for i in 1..Party_max
@actor_sprites.push(Sprite_Battler.new(@viewport1))
end
update
end
#--------------------------------------------------------------------------
# ● 画面のスクロール
#--------------------------------------------------------------------------
if method_defined?("screen_scroll")
alias side_view_screen_scroll screen_scroll
def screen_scroll
side_view_screen_scroll
# アクターの位置補正
for actor in $game_party.actors
actor.real_x = @real_x
actor.real_y = @real_y
actor.real_zoom = @real_zoom
end
end
end
end
class Sprite_Battler < RPG::Sprite
include Side_view
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@weapon = Sprite_Weapon.new(viewport, battler)
@flying = Sprite_Flying.new(viewport, battler)
@shadow = []
@fly = 0
@fly_direction = 1
@rand = rand(10)
@bitmaps = {}
self.effect_clear
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias side_view_dispose dispose
def dispose
side_view_dispose
@weapon.dispose if @weapon != nil
@flying.dispose if @flying != nil
if @_target_sprite != nil
@_target_sprite.bitmap.dispose
@_target_sprite.dispose
@_target_sprite = nil
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
@weapon.bitmap = nil
loop_animation(nil)
return
end
# バトラー更新
@battler.update
# バトラーアニメのデータ取得
@anime_type = @battler.anime_type
# bitmap をキャッシュ化
path = @anime_type[0].to_s + "#" + @battler.pattern.to_s
if not @bitmaps.include?(path) or @bitmaps[path].disposed?
# ファイル名か色相が現在のものと異なる場合
if @battler.is_a?(Game_Actor)
change = (@battler.character_name != @battler_name or @battler.character_hue != @battler_hue)
elsif @battler.is_a?(Game_Enemy)
change = (@battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue)
end
if change
# ビットマップを取得、設定
if @battler.is_a?(Game_Actor)
@battler_name = @battler.character_name
@battler_hue = @battler.character_hue
@bitmap = RPG::Cache.character(@battler_name, @battler_hue)
@width = @bitmap.width / 4
@height = @bitmap.height / 4
else
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
@bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = @bitmap.width
@height = @bitmap.height
@bitmaps["No_Motion"] = @bitmap
end
self.ox = @width / 2
self.oy = @height / 2
@battler.height = @height
@flag = true
# 戦闘不能または隠れ状態なら不透明度を 0 にする
if @battler.dead? or @battler.hidden
self.opacity = 0
end
end
if @battler.is_a?(Game_Actor) and (@anime_type[0] != @battler_condition or
@battler.pattern != @battler_pattern or flag)
# ビットマップを取得、設定
@battler_condition = @anime_type[0]
@battler_pattern = @battler.pattern
@sx = @battler.pattern * @width
@sy = @anime_type[0] % 4 * @height
self.bitmap = Bitmap.new(@width,@height)
self.bitmap.blt(0,0, @bitmap,Rect.new(@sx, @sy, @width, @height))
@bitmaps[path] = self.bitmap
flag = false
end
end
if @battler.is_a?(Game_Actor)
self.bitmap = @bitmaps[path]
else
self.bitmap = @bitmaps["No_Motion"]
end
# 飛行
update_fly
# シェイク
update_shake
# 回転
update_turning
# 反転
update_reverse
# 移動
update_moving
# 追加アニメ
update_add_anime
# エフェクト効果の適用
update_effect
# アニメーション ID が現在のものと異なる場合
flag = RTAB ? true : @battler.damage == nil
if flag and @battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# シェイク
if @battler.shake
self.start_shake(5, 5, 5)
@battler.shake = false
end
# 明滅
if @battler.blink
blink_on
else
blink_off
end
# 不可視の場合
unless @battler_visible
flag = RTAB ? (@battler.damage.size < 2 or @battler.damage_pop.size < 2) :
(@battler.damage == nil or @battler.damage_pop)
# 出現
if not @battler.hidden and not @battler.dead? and flag
appear
@battler_visible = true
end
end
if RTAB
# ダメージ
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
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
if RTAB
# アニメーション
if !@battler.animation.empty?
for animation in @battler.animation.reverse
if animation[2]
animation($data_animations[animation[0]], animation[1], true)
else
animation($data_animations[animation[0]], animation[1])
end
@battler.animation.delete(animation)
end
end
else
# アニメーション
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
animation(animation, @battler.animation_hit)
@battler.animation_id = 0
end
end
# ダメージ
if !RTAB and @battler.damage_pop
damage(@battler.damage, @battler.critical)
@battler.damage = nil
@battler.critical = false
@battler.damage_pop = false
end
flag = RTAB ? (@battler.damage.empty? and $scene.dead_ok?(@battler)) :
@battler.damage == nil
# コラプス
if flag and @battler.dead?
if @battler.is_a?(Game_Actor)
$game_system.se_play($data_system.actor_collapse_se)
elsif @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
end
collapse
@battler_visible = false
end
end
# スプライトの座標を設定
self.x = @battler.screen_x + @effect_ox
self.y = @battler.screen_y + @effect_oy
self.z = @battler.screen_z
self.zoom_x = @battler.real_zoom
self.zoom_y = @battler.real_zoom
# ウェイトカウントを減らす
@battler.wait_count -= 1
@battler.wait_count2 -= 1
# アニメーション待ち時間取得
@battler.animation_duration = @_animation_duration
if @battler.is_a?(Game_Actor)
self.zoom_x *= CHAR_ZOOM
self.zoom_y *= CHAR_ZOOM
end
# 遠距離アニメ
if @battler.flying_anime != [0,0,false,false] and @flying.nil?
@flying = Sprite_Flying.new(self.viewport, @battler)
elsif @battler.flying_anime == [0,0,false,false] and !@flying.nil?
@flying.dispose
@flying = nil
end
if @flying != nil
@flying.battler = @battler
@flying.update
end
if @battler.is_a?(Game_Actor)
# 武器アニメ
if @battler.weapon_anime_type1 and @weapon.nil?
@weapon = Sprite_Weapon.new(self.viewport, @battler)
elsif !@battler.weapon_anime_type1 and !@weapon.nil?
@weapon.dispose
@weapon = nil
end
if @weapon != nil
@weapon.battler = @battler
@weapon.update
@weapon.opacity = self.opacity
@weapon.x = self.x + BLZ_X[@battler.weapon_anime_type3][@battler.pattern]
@weapon.y = self.y + BLZ_Y[@battler.weapon_anime_type3][@battler.pattern]
@weapon.angle = BLZ_ANGLE[@battler.weapon_anime_type3][@battler.pattern]
if self.mirror
@weapon.angle += @weapon.angle - 180
end
end
end
# 残像
if @battler.shadow
if Graphics.frame_count % 2 == 0
shadow = ::Sprite.new(self.viewport)
shadow.bitmap = self.bitmap.dup
shadow.x = self.x
shadow.y = self.y
shadow.ox = self.ox
shadow.oy = self.oy
shadow.mirror = self.mirror
shadow.angle = self.angle
shadow.opacity = 160
shadow.zoom_x = self.zoom_x
shadow.zoom_y = self.zoom_y
if @battler.is_a?(Game_Actor)
shadow.src_rect.set(@sx, @sy, @width, @height)
else
shadow.src_rect.set(0, 0, @width, @height)
end
@shadow.push([shadow,duration = 10,@battler.true_x + @effect_ox,@battler.true_y + @effect_oy])
end
end
for s in @shadow
if !s[0].disposed?
s[0].update
s[1] -= 1
if s[1] < 1
if s[0].bitmap != nil
s[0].bitmap.dispose
end
s[0].dispose
else
s[0].x = @battler.screen_x(s[2])
s[0].y = @battler.screen_y(s[3])
end
else
s = nil
end
end
@shadow.compact!
end
#--------------------------------------------------------------------------
# ● エフェクトによる座標系の更新
#--------------------------------------------------------------------------
def update_effect
# 角度の修正
if @_upside_down
self.angle = (@_turning + 180) % 360
else
self.angle = @_turning
end
# X 座標の修正値
@effect_ox = @_shake + @_moving[0]
# Y 座標の修正値
@effect_oy = -@fly + @_moving[1]
if @_animation == nil or (RTAB and @_animation.empty?)
self.effect_clear
end
end
#--------------------------------------------------------------------------
# ● シェイク更新
#--------------------------------------------------------------------------
def update_shake
if @_shake_duration >= 1 or @_shake != 0
delta = (@_shake_power * @_shake_speed * @_shake_direction) / 10.0
if @_shake_duration <= 1 and @_shake * (@_shake + delta) < 0
@_shake = 0
else
@_shake += delta
end
if @_shake > @_shake_power * 2
@_shake_direction = -1
end
if @_shake < - @_shake_power * 2
@_shake_direction = 1
end
if @_shake_duration >= 1
@_shake_duration -= 1
end
end
end
#--------------------------------------------------------------------------
# ● 飛行更新
#--------------------------------------------------------------------------
def update_fly
if @rand > 0
@rand -= 1
return
end
if @battler.fly != 0
if @fly < @battler.fly / 4
@fly_direction = 1
elsif @fly > @battler.fly / 2
@fly_direction = -1
end
@fly += 0.5 * @fly_direction
end
end
#--------------------------------------------------------------------------
# ● 回転更新
#--------------------------------------------------------------------------
def update_turning
if @_turning_duration > 0 or @_turning != 0
@_turning += @_turning_direction * @_turning_speed / 2.0
# 残り回転数を減らす
if @_turning_direction == -1
if @_turning_duration > 0 and @_turning < 0
@_turning_duration -= 1
end
elsif @_turning_direction == 1
if @_turning_duration > 0 and @_turning >= 360
@_turning_duration -= 1
end
end
# 以下補正
while @_turning < 0
@_turning += 360
end
if @_turning_duration <= 0
@_turning = 0
end
@_turning %= 360
end
end
#--------------------------------------------------------------------------
# ● 左右反転更新
#--------------------------------------------------------------------------
def update_reverse
if @last_reverse != (@_reverse or @battler.reverse)
self.mirror = (@_reverse or @battler.reverse)
@last_reverse = (@_reverse or @battler.reverse)
end
end
#--------------------------------------------------------------------------
# ● 移動更新
#--------------------------------------------------------------------------
def update_moving
@move_distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
(@_move_coordinates[3] - @_move_coordinates[1]).abs
if @move_distance > 0
return if @_moving[0] == @_move_coordinates[0] and @_moving[1] == @_move_coordinates[1]
array = @_move_coordinates
x = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
y = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
@_moving = [x, y]
if @_move_quick_return and @_move_duration == 0
@_move_coordinates = [0,0,array[0],array[1]]
@_move_duration = @move_distance
end
@_move_duration -= @_move_speed
@_move_duration = [@_move_duration, 0].max
end
end
#--------------------------------------------------------------------------
# ● 追加アニメ更新 (RTAB限定機能)
#--------------------------------------------------------------------------
def update_add_anime
if RTAB
# アニメーション
if @_add_anime_id != 0
animation = $data_animations[@_add_anime_id]
animation(animation, true)
@_add_anime_id = 0
end
end
end
#--------------------------------------------------------------------------
# ● エフェクト初期化
#--------------------------------------------------------------------------
def effect_clear
@_effect_ox = 0
@_effect_oy = 0
@_shake_power = 0
@_shake_speed = 0
@_shake_duration = 0
@_shake_direction = 1
@_shake = 0
@_upside_down = false
@_reverse = false
@_turning_direction = 1
@_turning_speed = 0
@_turning_duration = 0
@_turning = 0
@_move_quick_return = true
@_move_speed = 0
@_move_coordinates = [0,0,0,0]
@_move_jump = false
@_move_duration = 0
@_moving = [0,0]
@_add_anime_id = 0
end
#--------------------------------------------------------------------------
# ● シェイクの開始
# power : 強さ
# speed : 速さ
# duration : 時間
#--------------------------------------------------------------------------
def start_shake(power, speed, duration)
@_shake_power = power
@_shake_speed = speed
@_shake_duration = duration
end
#--------------------------------------------------------------------------
# ● 上下反転を開始
#--------------------------------------------------------------------------
def start_upside_down
@_upside_down = @_upside_down ? false : true
end
#--------------------------------------------------------------------------
# ● 左右反転を開始
#--------------------------------------------------------------------------
def start_reverse
@_reverse = @_reverse ? false : true
end
#--------------------------------------------------------------------------
# ● 回転を開始
# direction: 方向
# speed : 速さ
# duration : 時間
#--------------------------------------------------------------------------
def start_turning(direction, speed, duration)
@_turning_direction = direction
@_turning_speed = speed
@_turning_duration = duration
@_turning = @_turning_direction == 1 ? 0 : 360
end
#--------------------------------------------------------------------------
# ● 移動を開始
# quick_return : 戻るかどうか
# speed : 速さ
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def start_moving(quick_return, speed, x, y)
@_move_quick_return = quick_return == 0 ? false : true
@_move_speed = speed
@_move_coordinates = [x,y,@_move_coordinates[0],@_move_coordinates[1]]
distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
(@_move_coordinates[3] - @_move_coordinates[1]).abs
@_move_duration = distance
end
#--------------------------------------------------------------------------
# ● アニメ追加を開始
# id : ID
# hit : 命中フラッグ
#--------------------------------------------------------------------------
def start_add_anime(id)
@_add_anime_id = id
end
#--------------------------------------------------------------------------
# ● 各種エフェクトの開始判定
#--------------------------------------------------------------------------
if !method_defined?("side_view_animation_process_timing")
alias side_view_animation_process_timing animation_process_timing
end
def animation_process_timing(timing, hit)
side_view_animation_process_timing(timing, hit)
if (timing.condition == 0) or
(timing.condition == 1 and hit == true) or
(timing.condition == 2 and hit == false)
if timing.se.name =~ SHAKE_FILE
names = timing.se.name.split(/#/)
power = names[1].nil? ? SHAKE_POWER : names[1].to_i
speed = names[2].nil? ? SHAKE_SPEED : names[2].to_i
duration = names[3].nil? ? SHAKE_DURATION : names[3].to_i
# シェイクを開始
self.start_shake(power, speed, duration)
end
if timing.se.name == UPSIDE_DOWN_FILE
# 上下反転を開始
self.start_upside_down
end
if timing.se.name == REVERSE_FILE
# 左右反転を開始
self.start_reverse
end
if timing.se.name =~ TURNING_FILE
names = timing.se.name.split(/#/)
direction = names[1].nil? ? TURNING_DIRECTION : names[1].to_i
speed = names[2].nil? ? TURNING_SPEED : names[2].to_i
duration = names[3].nil? ? TURNING_DURATION : names[3].to_i
# 回転を開始
self.start_turning(direction, speed, duration)
end
if timing.se.name =~ MOVE_FILE
names = timing.se.name.split(/#/)
quick_return= names[1].nil? ? MOVE_RETURN : names[1].to_i
speed = names[2].nil? ? MOVE_SPEED : names[2].to_i
x = names[3].nil? ? MOVE_COORDINATES[0] : names[3].to_i
y = names[3].nil? ? MOVE_COORDINATES[1] : names[4].to_i
# 移動を開始
self.start_moving(quick_return, speed, x, y)
end
if timing.se.name =~ ADD_ANIME_FILE
names = timing.se.name.split(/#/)
id = names[1].nil? ? ADD_ANIME_ID : names[1].to_i
# アニメ追加を開始
self.start_add_anime(id)
end
end
end
end
#==============================================================================
# ■ Sprite_Weapon
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Weapon < ::Sprite
include Side_view
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :battler # バトラー
attr_reader :cw # グラフィックの幅
attr_reader :ch # グラフィックの高さ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil or !@battler.is_a?(Game_Actor)
self.bitmap = nil
return
end
# ウエポンアニメのデータ取得
@weapon_anime_type = @battler.weapon_anime_type
# 設定が「非表示」の場合
if !@weapon_anime_type[1] or @weapon_anime_type[0].nil?
self.visible = false
return
else
self.visible = true
end
# ファイル名が現在のものと異なる場合
if @weapon_anime_type[0] != @weapon_name
@weapon_name = @weapon_anime_type[0]
# ビットマップを取得、設定
self.bitmap = RPG::Cache.icon(@weapon_name)
@width = bitmap.width
@height = bitmap.height
@flag = true
end
# 現在アニメパターンが現在のものと異なる場合
if @pattern != @battler.pattern or @flag or @condition != @battler.condition
@pattern = @battler.pattern
@condition = @battler.condition
self.ox = @width
self.oy = @height
self.z = battler.screen_z
self.zoom_x = @battler.real_zoom * CHAR_ZOOM
self.zoom_y = @battler.real_zoom * CHAR_ZOOM
self.src_rect.set(0, 0, @width, @height)
self.opacity = 255
# バトラーより手前に表示
if @weapon_anime_type[2]
self.z += 10
# バトラーより奥に表示
else
self.z -= 10
end
@flag = false
end
end
end
#==============================================================================
# ■ Sprite_Flying
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Flying < RPG::Sprite
include Side_view
LATE_COUNT = 20
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :battler # バトラー
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@later = LATE_COUNT
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# 遠距離アニメ
flying_animation = @battler.flying_animation
flying_start = flying_animation[0]
flying_end = flying_animation[1]
# アニメーション ID が現在のものと異なる場合
if @anime_id != @battler.flying_anime[0]
@anime_id = @battler.flying_anime[0]
@animation = $data_animations[@anime_id]
end
# アニメーション 開始
if flying_start
animation(@animation,true)
elsif flying_end
# 消去を遅らせてみたりする
@later -= 1
if @later < 0
animation(nil, true)
@later = LATE_COUNT
end
end
self.x = @battler.flying_x
self.y = @battler.flying_y
self.z = @battler.screen_z + 1000
end
end
module RPG
class Skill
#--------------------------------------------------------------------------
# ● 魔法かどうかの判断
#--------------------------------------------------------------------------
def magic?
if @atk_f == 0
return true
else
return false
end
end
end
end
# アローカーソルの位置修正
class Arrow_Actor < Arrow_Base
include Side_view
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias side_view_update update
def update
side_view_update
# スプライトの座標を設定
if self.actor != nil && (self.x != self.actor.screen_x + ARROW_OX or self.y != self.actor.screen_y + ARROW_OY)
self.x = self.actor.screen_x + ARROW_OX
self.y = self.actor.screen_y + ARROW_OY
end
end
end
class Arrow_Enemy < Arrow_Base
include Side_view
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias side_view_update update
def update
side_view_update
# スプライトの座標を設定
if self.enemy != nil && self.y != self.enemy.screen_y + self.enemy.height/2
self.x = self.enemy.screen_x
self.y = self.enemy.screen_y + self.enemy.height/2
end
end
end
# ☆サイドビュー 簡易版
#
# Side View Battle Ver 1.03
#--------------------------------------------------------------------------
# サイドビュー戦闘スクリプト歩行グラフィック版 ☆Special Thanks by 吹雪
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# グラフィックファイルの規格
#--------------------------------------------------------------------------
# バトラーグラフィック
#
# 歩行グラフィックをそのまま使います。
#
# 武器グラフィック
#
# 武器のアイコングラフィックをそのまま使います。
#
module Side_view
#--------------------------------------------------------------------------
# ● RTAB併用フラッグ ☆自動認識
# Scene_Battle に メソッド synthe? があるかどうかで認識
# 自動認識したくない場合は書き換えてください。
#--------------------------------------------------------------------------
if Scene_Battle.method_defined?("synthe?")
RTAB = true
else
RTAB = false
end
#--------------------------------------------------------------------------
# ● RTABのカメラワークを使う場合の描画位置 誤差修正 ☆自動認識
# 自動認識したくない場合は書き換えてください。
#--------------------------------------------------------------------------
def camera_correctness
return false if !RTAB
begin
return $scene.drive
rescue
return false
end
end
#--------------------------------------------------------------------------
# ● パーティの最大人数 (あくまでもスプライトを増やすだけのもの)
#--------------------------------------------------------------------------
Party_max = 4
#--------------------------------------------------------------------------
# ● バトラーグラフィックの拡大率(アクター専用)
#--------------------------------------------------------------------------
CHAR_ZOOM = 1.2
#--------------------------------------------------------------------------
# ● アローカーソル位置補正
#--------------------------------------------------------------------------
ARROW_OX = 0
ARROW_OY = 64
#--------------------------------------------------------------------------
# ● 飛行として扱うステート名配列
#--------------------------------------------------------------------------
FLY_STATES = ["飛行"]
#--------------------------------------------------------------------------
# ● 戦闘画面パーティの位置
#--------------------------------------------------------------------------
PARTY_X = 480 # パーティの X 位置
PARTY_Y = 120 # パーティの Y 位置
FORMATION_X = 32 # 各アクター同士の間隔 X
FORMATION_Y = 48 # 各アクター同士の間隔 Y
#--------------------------------------------------------------------------
# ● カスタマイズ定数
#--------------------------------------------------------------------------
NORMAL = "NORMAL"
WALK_R = "WALK_R"
WALK_L = "WALK_L"
ATTACK = "ATTACK"
ATTACK_R = "ATTACK_R"
ATTACK_L = "ATTACK_L"
MAGIC = "MAGIC"
ITEM = "ITEM"
# アニメの設定
ANIME = {
# [画像ID,ループするか,アニメスピード,武器表示するか,アニメさせない,武器グラ右手or左手]
NORMAL => [1,true , 0,false, true ,"" ], # 通常待機
WALK_R => [2,true , 6,false, false,"" ], # 右移動
WALK_L => [1,true , 6,false, false,"" ], # 左移動
ATTACK_R => [1,false, 6,true , false,"右手"], # 右手攻撃
ATTACK_L => [1,false, 6,true , false,"左手"], # 左手攻撃
MAGIC => [1,false, 6,false, false,"" ], # 右手攻撃
ITEM => [1,false, 6,false, false,"" ], # 左手攻撃
}
# デフォルト値の設定
ANIME.default = [1,false,12,false,"",""]
# アクション設定の関連付け
ACTION_LIB = {
"移動" => "moving_setup",
"アクターアニメ実行" => "action",
"遠距離アニメ" => "flying",
"アクターアニメ変更" => "change",
"行動アニメ" => "animation1",
"対象アニメ" => "animation2",
"ウエイト" => "wait",
"左右反転" => "reverse",
"閃きアニメ" => "flash",
"残像表示" => "shadow_on",
"残像消去" => "shadow_off",
"アクターアニメ固定" => "freeze",
"アニメ固定解除" => "freeze_lifting",
"アニメーションの表示" => "animation_start",
"SEの演奏" => "play_se",
}
ACTION_LIB.default = "finish"
# アクション設定のときに 右手攻撃 or 左手攻撃 を判別するANIME
# "アクターアニメ変更#ATTACK"としたときにATTACK_RまたはATTACK_Lを判別する
DUAL_WEAPONS_ANIME = [ATTACK]
#バトラーアニメーションパターン数(ここを間違えると正常にアイコンが動きません)
ANIME_PATARN = 3
#武器表示X座標
BLZ_X = {
# X 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
0=>[0,0,0,0], # アニメなし
1=>[2,2,2,2], # 振り下ろし
2=>[15,10,0,0], # 突き
3=>[2,2,2,2], # 振り上げ
4=>[0,0,3,3], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#武器表示Y座標
BLZ_Y = {
# Y 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
0=>[0,0,0,0], # アニメなし
1=>[6,6,6,6], # 振り下ろし
2=>[6,6,6,6], # 突き
3=>[6,6,6,6], # 振り上げ
4=>[8,8,8,8], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#武器表示角度
BLZ_ANGLE = {
# Y 座標の設定 武器アニメ => [1, 2, 3] ← ANIME_PATARNの数と合わせる
# 別に 式 を使わなくて定数でもよいが使ったほうがわかりやすいかも?
0=>[0,0,0,0], # アニメなし
1=>[75-45*3,75-45*2,75-45*1,75-45*1], # 振り下ろし
2=>[45,45,45,45], # 突き
3=>[100-45*1,100-45*2,100-45*3,00-45*4], # 振り上げ
4=>[45,45,45,45], # 弓、銃
5=>[0,0,0,0], # 追加用
6=>[0,0,0,0], # 追加用
7=>[0,0,0,0], # 追加用
8=>[0,0,0,0], # 追加用
}
#--------------------------------------------------------------------------
# ● シェイクの設定
#--------------------------------------------------------------------------
SHAKE_FILE = "シェイク" # ファイル名
SHAKE_POWER = 5 # 強さ
SHAKE_SPEED = 5 # 速さ
SHAKE_DURATION = 5 # 時間
#--------------------------------------------------------------------------
# ● 上下反転の設定
#--------------------------------------------------------------------------
UPSIDE_DOWN_FILE = "上下反転" # ファイル名
#--------------------------------------------------------------------------
# ● 左右反転の設定
#--------------------------------------------------------------------------
REVERSE_FILE = "左右反転" # ファイル名
#--------------------------------------------------------------------------
# ● 回転の設定
#--------------------------------------------------------------------------
TURNING_FILE = "回転" # ファイル名
TURNING_DIRECTION = 1 # 方向(1.反時計回り,-1.時計回り)
TURNING_SPEED = 40 # 速さ
TURNING_DURATION = 1 # 回転数
#--------------------------------------------------------------------------
# ● 移動の設定
#--------------------------------------------------------------------------
MOVE_FILE = "移動" # ファイル名
MOVE_RETURN = 1 # 元の位置に戻るか?
MOVE_SPEED = 32 # 速さ
MOVE_COORDINATES = [0,-640] # 元の位置からの相対座標
#--------------------------------------------------------------------------
# ● アニメ追加の設定
#--------------------------------------------------------------------------
ADD_ANIME_FILE = "アニメ追加" # ファイル名
ADD_ANIME_ID = 0 # アニメーションID
#--------------------------------------------------------------------------
# ● デフォルトとRTABのデータ変換
#--------------------------------------------------------------------------
def convert_battler
return RTAB ? @active_actor : @active_battler
end
#--------------------------------------------------------------------------
# ● デフォルトとRTABのデータ変換2
#--------------------------------------------------------------------------
def convert_battler2(*arg)
return RTAB ? arg[0] : @active_battler
end
end
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
module BattleActions
# 下のものはあくまでも一例なので
# 独自に作ってください。
Actions = {
"通常攻撃" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#target,32,0,64,0",
"アクターアニメ変更#NORMAL",
"ウエイト#5",
"アクターアニメ変更#ATTACK",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"SEの演奏#016-Jump02,80,100",
"移動#self,0,0,48,5",
"終了"
],
"エネミー攻撃" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-36,0,12,0",
"アクターアニメ変更#NORMAL",
"ウエイト#5",
"アクターアニメ変更#ATTACK",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,12,0",
"終了"
],
"術発動" => [
"閃きアニメ",
"行動アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-32,0,4,0",
"アクターアニメ変更#MAGIC",
"ウエイト#15",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,4,2",
"終了"
],
"アイテム使用" => [
"閃きアニメ",
"アクターアニメ変更#WALK_L",
"移動#self,-32,0,4,0",
"行動アニメ",
"アクターアニメ変更#ITEM",
"ウエイト#15",
"遠距離アニメ",
"対象アニメ",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,4,2",
"終了"
],
"払い抜け" => [
"閃きアニメ",
"アクターアニメ変更#WALK_L",
"移動#target_near,50,0,48,6",
"左右反転",
"アクターアニメ固定#ATTACK#3",
"行動アニメ",
"SEの演奏#135-Light01,100,100",
"アニメーションの表示#self,42",
"ウエイト#15",
"左右反転",
"残像表示",
"移動#target_far,-50,0,48,0",
"対象アニメ",
"残像消去",
"アニメ固定解除",
"アクターアニメ変更#WALK_L",
"移動#self,0,0,48,1,0",
"終了"
],
} # ここで終わり 消さないでください
end
module RPG
class Weapon
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
case @id
when 1 # ブロンズソード
return BattleActions::Actions["通常攻撃"]
end
return BattleActions::Actions["通常攻撃"] # デフォルト値
end
end
class Skill
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
if self.magic?
return BattleActions::Actions["術発動"] # デフォルト値
else
return BattleActions::Actions["払い抜け"] # デフォルト値
end
end
end
class Item
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
return BattleActions::Actions["アイテム使用"] # デフォルト値
end
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● アクション設定
#--------------------------------------------------------------------------
def battle_actions
return BattleActions::Actions["エネミー攻撃"] # デフォルト値
end
end
module RPG
=begin
☆ 説明
アイコン武器の動き方の設定です。
module Side_view の BLZ_X, BLZ_Y, BLZ_ANGLE が参照されます。
あくまでも動き方の設定なので画像はアイコンが使われます。
● カスタマイズ方法
1、データベースからの設定(初級者向け)
武器アニメ属性を作り、それを武器へつけます。
例 武器アニメ1 数字は半角で、スペースは開けない
2、スクリプトからの設定(中級者向け)
case @id
when 1,2,3,4
return 1
when 5,6,7,8
return 2
end
return 0
のように描くとID別に指定可能です。
その他にも、条件分岐などをいれて設定しても良いです。
例えば、属性ID50を持っているときは、アニメ1としたいなら
if @element_set.include?(50)
return 1
end
とします。
1、のデータベースからの設定を使わない場合
element_name = "武器アニメ"
for i in @element_set
if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
return $1.to_i
end
end
の部分は削除してもかまいません
=end
class Weapon
#--------------------------------------------------------------------------
# ● 武器アニメーション
#--------------------------------------------------------------------------
def anime
# 属性取得用
element_name = "武器アニメ"
for i in @element_set
if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
return $1.to_i
end
end
# カスタマイズ設定 ID 指定
case @id
when 1,2,3,4
return 1
when 5,6,7,8
return 2
end
return 1 # デフォルト値
end
end
end
=begin
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
☆ 説明
行動者から対象者にアニメを飛ばします。
飛ばすアニメを データベース‐アニメーション で作ります。
[アニメーションID, スピード, 往復するか?,直線(false)or曲線(true)] で指定します。
● カスタマイズ方法
case @id
when 17,18,19,20
return [101,32,false,false]
when 21,22,23,24
return [102,32,false,false]
end
return 0
のように描くとID別に指定可能です。
● アニメーションID
飛ばすアニメーションIDです。短い場合は繰り返しで表示されます。
● スピード
大きいほうが早い(0だとアニメは移動しません)
1 = 1フレームで1ドット進むと考えてください。
● 往復するか?
true とした場合、ブーメランのようにアニメが戻ります。
● 直線(false)or曲線(true)
true = 対象に向かって曲線で、アニメが飛びます。(修正の余地ありですが・・・)
false = 対象に向かって直線で、アニメが飛びます。
=end
module RPG
class Weapon
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
# ID 指定 の例
#case @id
#when 34 # ブーメランっぽいやつ
# return [103,32,true,true]
#when 17,18,19,20
# return [101,32,false,false]
#when 21,22,23,24
# return [102,32,false,false]
#end
return [0,0,false,false] # デフォルト値
end
end
class Skill
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
class Item
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
end
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 遠距離アニメーション
#--------------------------------------------------------------------------
def flying_anime
return [0,0,false,false] # デフォルト値
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
include Side_view
#--------------------------------------------------------------------------
# ● 追加・公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :height # 画像の高さ
attr_accessor :real_x # X座標補正
attr_accessor :real_y # Y座標補正
attr_accessor :real_zoom # 拡大率
attr_accessor :wait_count # アニメーション 待ち時間
attr_accessor :wait_count2 # アニメーション 待ち時間2
attr_accessor :pattern # アニメーション カウント(キャラ)
attr_accessor :shake # シェイク開始フラッグ
attr_accessor :reverse # 左右反転フラッグ
attr_accessor :shadow # 残像フラッグ
attr_accessor :flash_flag # 閃きフラッグ
attr_reader :ox # X座標補正
attr_reader :oy # Y座標補正
attr_reader :flying_x # 遠距離アニメX座標
attr_reader :flying_y # 遠距離アニメY座標
attr_reader :flying_anime # 遠距離アニメ
attr_reader :animation1_on # 行動アニメ開始フラッグ
attr_reader :animation2_on # 対象アニメ開始フラッグ
#--------------------------------------------------------------------------
# ● デフォルトのアニメーション待ち時間を取得
#--------------------------------------------------------------------------
def animation_duration=(animation_duration)
@_animation_duration = animation_duration
end
#--------------------------------------------------------------------------
# ● バトル開始時のセットアップ
#--------------------------------------------------------------------------
def start_battle
@height = 0
@real_x = 0
@real_y = 0
@real_zoom = 1.0
@battler_condition = ""
@action = nil
@battle_actions = []
@battler_action = false
@step = 0
@anime_on = false
@wait_count = 0
@wait_count2 = 0
@ox = 0
@oy = 0
@pattern = 0
@pattern_log = true
@pattern_freeze = false
@condition_freeze = false
@active = false
@move_distance = nil
@move_wait = 0
@move_coordinates = [0,0,0,0]
@flying_distance = nil
@flying_wait = 0
@flying_x = 0
@flying_y = 0
@flash_flag = {}
self.flying_clear
end
#--------------------------------------------------------------------------
# ● 移動中判定
#--------------------------------------------------------------------------
def moving?
# X座標補正または、Y座標補正が0でなければ、移動中
return (@ox != 0 or @oy != 0)
end
#--------------------------------------------------------------------------
# ● 移動終了判定
#--------------------------------------------------------------------------
def move_end?
return (@ox == @move_coordinates[0] and @oy == @move_coordinates[1])
end
#--------------------------------------------------------------------------
# ● アクション開始設定
#--------------------------------------------------------------------------
def action(flag = true)
@battler_action = flag
@animation1_on = false
@animation2_on = false
@step = "setup"
end
#--------------------------------------------------------------------------
# ● アクション中判定
#--------------------------------------------------------------------------
def action?
return @battler_action
end
#--------------------------------------------------------------------------
# ● 閃き判定
#--------------------------------------------------------------------------
def flash?
return @flash_flg
end
#--------------------------------------------------------------------------
# ● 戦闘不能判定
#--------------------------------------------------------------------------
def anime_dead?
if $game_temp.in_battle and !RTAB
if [2,3,4,5].include?($scene.phase4_step)
return @last_dead
end
end
return @last_dead = self.dead?
end
#--------------------------------------------------------------------------
# ● ピンチ状態判定
#--------------------------------------------------------------------------
def crisis?
if $game_temp.in_battle and !RTAB
if [2,3,4,5].include?($scene.phase4_step)
return @last_crisis
end
end
return @last_crisis = (self.hp <= self.maxhp / 4 or badstate?)
end
#--------------------------------------------------------------------------
# ● バッドステート判定
#--------------------------------------------------------------------------
def badstate?
for i in @states
unless $data_states[i].nonresistance
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ● 飛行
#--------------------------------------------------------------------------
def fly
if @fly != nil
return @fly
end
for id in @states
if FLY_STATES.include?($data_states[id].name)
return 60
end
end
return 0
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ目標座標の計算
#--------------------------------------------------------------------------
def flying_setup
# 二度目は実行しない
return if @flying_distance != nil && !camera_correctness
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
# 目的座標を計算
@f_target_x = 0
@f_target_y = 0
for t in targets
@f_target_x += t.screen_x
@f_target_y += t.screen_y
end
if targets != []
@f_target_x /= targets.size
@f_target_y /= targets.size
else
@flying_distance = 0
return
end
# 距離の計算
@flying_distance = (self.screen_x - @f_target_x).abs + (self.screen_y - @f_target_y).abs
@flying_end = false
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ
#--------------------------------------------------------------------------
def flying_animation
# 戻る
if @step != "flying" or @flying_distance.nil?
return [false,true]
end
# あらかじめ計算
self_x = self.screen_x
self_y = self.screen_y
@flying_distance = @flying_distance == 0 ? 1 : @flying_distance
n1 = @flying_wait / @flying_distance.to_f
if @flying_distance - @flying_wait > @flying_distance / 2
n2 = 1.0 + 10.0 * @flying_wait / @flying_distance.to_f
else
n2 = 1.0 + 10.0 * (@flying_distance - @flying_wait) / @flying_distance.to_f
end
if !@flying_anime[4]
# 直線移動
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1).to_i
else
# 曲線移動
if !@flying_proceed_end
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1 - n2**2).to_i
else
x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
y = (self_y + 1.0 * (@f_target_y - self_y) * n1 + n2**2).to_i
end
end
# 座標代入
@flying_x = x
@flying_y = y
# ウエイト
if !@flying_proceed_end
# 開始
@flying_proceed_start = @flying_wait == 0
@flying_wait += @flying_anime[1]
@flying_wait = [@flying_wait,@flying_distance].min
@flying_proceed_end = @flying_wait == @flying_distance
else
# 開始
@flying_return_start = @flying_wait == @flying_distance
@flying_wait -= @flying_anime[1]
@flying_wait = [@flying_wait,0].max
@flying_return_end = @flying_wait == 0
end
if @flying_anime[1] == 0
@flying_end = true
elsif !@flying_anime[2]
@flying_end = @flying_proceed_end
else
@flying_end = @flying_return_end
end
# 値を返す(アニメ開始,アニメ終了)
return [@flying_proceed_start,@flying_end]
end
#--------------------------------------------------------------------------
# ● 遠距離アニメ初期化
#--------------------------------------------------------------------------
def flying_clear
@flying_proceed_start = false
@flying_proceed_end = false
@flying_return_start = false
@flying_return_end = false
@flying_end = true
@flying_anime = [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 移動
#--------------------------------------------------------------------------
def move
# 距離の計算
@move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
if @move_distance > 0
return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
array = @move_coordinates
# ジャンプ補正値の計算
n = 100.0 * @move_wait / @move_distance
jump = -@move_action[4] * n * (100 - n) / 100.0
@ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
@oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
# ウエイト
@move_wait -= @move_action[3]
@move_wait = [@move_wait,0].max
end
end
#--------------------------------------------------------------------------
# ● 移動アクションの取得
#--------------------------------------------------------------------------
def get_move_action
string = @action.split(/#/)[1]
string = string.split(/,/)
@move_action = [string[0],string[1].to_i,string[2].to_i,string[3].to_i,string[4].to_i,string[5].to_i]
end
#--------------------------------------------------------------------------
# ● アクションの取得
#--------------------------------------------------------------------------
def get_step
if @action.nil?
@step = "finish"
return
end
return ACTION_LIB[@action.split(/#/)[0]]
end
#--------------------------------------------------------------------------
# ● フレーム更新 (次のアクションへ)
#--------------------------------------------------------------------------
def update_next
@action = @battle_actions.shift
@step = get_step
end
#--------------------------------------------------------------------------
# ● フレーム更新 (動作取得)
#--------------------------------------------------------------------------
def update_setup
# アクションの取得
self.get_actions
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (移動取得)
#--------------------------------------------------------------------------
def update_moving_setup
# 移動アクションの取得
self.get_move_action
# 移動目標の設定
self.move_setup
@step = "moving"
end
#--------------------------------------------------------------------------
# ● フレーム更新 (移動)
#--------------------------------------------------------------------------
def update_moving
# 移動
self.move
self.condition = @battler_condition
# 移動完了したら次のステップへ
if move_end?
update_next
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメ実行)
#--------------------------------------------------------------------------
def update_action
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
# ループか否か
if !ANIME[@battler_condition][1]
self.anime_on
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (遠距離アニメ)
#--------------------------------------------------------------------------
def update_flying
# 目標の設定
self.flying_setup
# 遠距離アニメ終了
if @flying_end or @flying_anime == [0,0,false,false]
self.flying_clear
update_next
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメ変更)
#--------------------------------------------------------------------------
def update_change
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
# ループか否か
if !ANIME[@battler_condition][1]
self.anime_on
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (行動アニメ)
#--------------------------------------------------------------------------
def update_animation1
@animation1_on = true
# 行動アニメの後に行動を開始する
if $scene.phase4_step == 3
id = RTAB ? @anime1 : $scene.animation1_id
animation = $data_animations[id]
frame_max = animation != nil ? animation.frame_max : 0
@wait_count2 = frame_max * 2
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (対象アニメ)
#--------------------------------------------------------------------------
def update_animation2
@animation2_on = true
# 行動アニメの後に行動を開始する
if $scene.phase4_step == 4
id = RTAB ? @anime2 : $scene.animation2_id
animation = $data_animations[id]
frame_max = animation != nil ? animation.frame_max : 0
@wait_count2 = frame_max * 2
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ウエイト)
#--------------------------------------------------------------------------
def update_wait
@wait_count2 = @action.split(/#/)[1].to_i
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (残像表示)
#--------------------------------------------------------------------------
def update_shadow_on
@shadow = true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (残像消去)
#--------------------------------------------------------------------------
def update_shadow_off
@shadow = false
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (左右反転)
#--------------------------------------------------------------------------
def update_reverse
@reverse = @reverse ? false : true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (閃きアニメ)
#--------------------------------------------------------------------------
def update_flash
# 閃きアニメの後に行動を開始する
if @flash_flag["normal"]
@wait_count = $scene.flash_duration
@flash_flag["normal"] = false
return
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (SEの演奏)
#--------------------------------------------------------------------------
def update_play_se
data = @action.split(/#/)[1]
data = data.split(/,/)
# SE を演奏
Audio.se_play("Audio/SE/" + data[0], data[1].to_i, data[2].to_i)
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アクターアニメ固定)
#--------------------------------------------------------------------------
def update_freeze
con = @action.split(/#/)[1]
# 右手・左手を分ける
if DUAL_WEAPONS_ANIME.include?(con)
if !@first_weapon and @second_weapon
con = con + "_L"
else
con = con + "_R"
end
end
# アニメ変更
self.condition = con
@pattern = @action.split(/#/)[2].to_i
@pattern_freeze = true
@condition_freeze = true
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アクターアニメ固定解除)
#--------------------------------------------------------------------------
def update_freeze_lifting
@pattern_freeze = false
@condition_freeze = false
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アニメーションの表示)
#--------------------------------------------------------------------------
def update_animation_start
data = @action.split(/#/)[1]
data = data.split(/,/)
target = data[0]
animation_id = data[1].to_i
if RTAB
case target
when "self"
@animation.push([animation_id,true])
when "target"
for tar in @target
tar.animation.push([animation_id, true])
end
end
else
case target
when "self"
@animation_id = animation_id
@animation_hit = true
when "target"
for tar in $scene.target_battlers
tar.animation_id = animation_id
tar.animation_hit = true
end
end
end
update_next
end
#--------------------------------------------------------------------------
# ● フレーム更新 (動作終了)
#--------------------------------------------------------------------------
def update_finish
# 動作終了
@battler_action = false
@step = "setup"
end
#--------------------------------------------------------------------------
# ● バトラーの状態(バトラーグラフィックのタイプ)
#--------------------------------------------------------------------------
def condition
return @battler_condition
end
#--------------------------------------------------------------------------
# ● バトラーの状態 変更(バトラーグラフィックのタイプ)
#--------------------------------------------------------------------------
def condition=(condition)
return if @condition_freeze
if @battler_condition != condition
@wait_count = ANIME[condition][2]
@pattern = 0
end
@battler_condition = condition
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウェイト中の場合
if @wait_count == 0
# パターン更新
self.char_animation
@wait_count = ANIME[@battler_condition][2]
end
# パターン更新
self.char_animation
# ウェイト中の場合
if @wait_count2 > 0
return
end
# 行動アニメーション
if @battler_action
method("update_" + @step).call
return
end
# データ初期化
@animation1_on = false
@animation2_on = false
@action = nil
@battle_actions = []
@move_wait = 0
@move_distance = nil
@flying_wait = 0
@flying_distance = nil
@flash = false
# 通常・待機
return self.condition = NORMAL
end
#--------------------------------------------------------------------------
# ● アクションの取得
#--------------------------------------------------------------------------
def get_actions
skill = $data_skills[self.current_action.skill_id]
item = $data_items[self.current_action.item_id]
kind = self.current_action.kind
# 動作取得
@battle_actions = []
# スキル
if skill != nil && kind == 1
@battle_actions = skill.battle_actions.dup
@flying_anime = skill.flying_anime
# アイテム
elsif item != nil && kind == 2
@battle_actions = item.battle_actions.dup
@flying_anime = item.flying_anime
# 左手攻撃
elsif !@first_weapon and @second_weapon and self.is_a?(Game_Actor)
@battle_actions = self.battle_actions2.dup
@flying_anime = self.flying_anime2
# 右手攻撃
elsif self.current_action.basic == 0 and
self.is_a?(Game_Actor) and self.current_action.kind == 0
@battle_actions = self.battle_actions1.dup
@flying_anime = self.flying_anime1
# 通常攻撃
elsif self.current_action.basic == 0 and self.current_action.kind == 0
@battle_actions = self.battle_actions.dup
@flying_anime = self.flying_anime
else
@battle_actions = ["終了"]
@flying_anime = [0,0,false,false]
end
end
#--------------------------------------------------------------------------
# ● ループしないアニメのセット
#--------------------------------------------------------------------------
def anime_on
@pattern = 0
@pattern_log = true
return
end
#--------------------------------------------------------------------------
# ● パターン更新
#--------------------------------------------------------------------------
def char_animation
# パタン固定の場合もどる
return if @pattern_freeze
# ループしないアニメの場合 1234 で止まる
if !ANIME[@battler_condition][1] && @pattern == 3
return
end
# アニメさせない場合 1 で止まる
if ANIME[@battler_condition][4]
@pattern = 0
return
end
@pattern = (@pattern + 1) % 4
end
#--------------------------------------------------------------------------
# ● アニメタイプ
#--------------------------------------------------------------------------
def anime_type
return ANIME[@battler_condition] != nil ? ANIME[@battler_condition][0] : 0
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
include Side_view
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias side_view_setup setup
def setup(actor_id)
side_view_setup(actor_id)
start_battle
end
#--------------------------------------------------------------------------
# ● 二刀武器のID取得 ※エラー回避用
#--------------------------------------------------------------------------
def weapon2_id
return @weapon2_id != nil ? @weapon2_id : 0
end
#--------------------------------------------------------------------------
# ● X方向 ポジション 取得
#--------------------------------------------------------------------------
def position
return $data_classes[@class_id].position
end
#--------------------------------------------------------------------------
# ● Y方向 ポジション 取得
#--------------------------------------------------------------------------
def position2
return self.index
end
#--------------------------------------------------------------------------
# ● 武器アニメタイプ
#--------------------------------------------------------------------------
def weapon_anime_type(type = @battler_condition)
file_name = weapon_anime_type0(type)
visible = weapon_anime_type1(type)
z = weapon_anime_type2(type)
motion = weapon_anime_type3(type)
return [file_name,visible,z,motion]
end
# 武器アイコン取得
def weapon_anime_type0(type = @battler_condition)
type = ANIME[type][5]
return weapon_anime1 if type == "右手"
return weapon_anime2 if type == "左手"
return nil
end
# 表示・非表示の取得
def weapon_anime_type1(type = @battler_condition)
return ANIME[type][3]
end
# バトラーより上に表示するかどうか
def weapon_anime_type2(type = @battler_condition)
type = ANIME[type][5]
return true if type == "左手"
return false
end
# 武器の動作No.取得
def weapon_anime_type3(type = @battler_condition)
type = ANIME[type][5]
return extend_weapon_anime1 if type == "右手"
return extend_weapon_anime2 if type == "左手"
return 0
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_x
return PARTY_X + position * FORMATION_X + @ox
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_y
# パーティ内の並び順から Y 座標を計算して返す
if self.index != nil
y = position2 * FORMATION_Y + PARTY_Y + @oy - @height / 2
return y
else
return 0
end
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x(true_x = self.true_x)
return 320 + (true_x - 320) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y(true_y = self.true_y)
return true_y * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 Z 座標の取得
#--------------------------------------------------------------------------
def screen_z
return screen_y + 1000
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_x
return 320 + (true_x - @ox - 320) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def base_y
return (true_y - @oy) * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 拡大率の取得
#--------------------------------------------------------------------------
def zoom
return ($scene.zoom_rate[1] - $scene.zoom_rate[0]) *
(true_x + @fly) / 480 + $scene.zoom_rate[0]
end
#--------------------------------------------------------------------------
# ● 攻撃用、バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def attack_x(z)
return (320 - true_x) * z * 0.75
end
#--------------------------------------------------------------------------
# ● 攻撃用、バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def attack_y(z)
return (160 - (true_y + fly / 4) * z + @height * zoom * z / 2) * 0.75
end
#--------------------------------------------------------------------------
# ● 閃き待ち時間
#--------------------------------------------------------------------------
def flash_duration
return $scene.flash_duration
end
#--------------------------------------------------------------------------
# ● アニメーション取得
#--------------------------------------------------------------------------
def battle_actions1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
end
#--------------------------------------------------------------------------
# ● アニメーション取得
#--------------------------------------------------------------------------
def battle_actions2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
end
#--------------------------------------------------------------------------
# ● 武器アニメーション 動き方 取得
#--------------------------------------------------------------------------
def extend_weapon_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.anime : 0
end
#--------------------------------------------------------------------------
# ● 武器アニメーション 動き方 取得
#--------------------------------------------------------------------------
def extend_weapon_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.anime : 0
end
#--------------------------------------------------------------------------
# ● 武器アニメーション取得
#--------------------------------------------------------------------------
def weapon_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.icon_name : ""
end
#--------------------------------------------------------------------------
# ● 武器アニメーション取得
#--------------------------------------------------------------------------
def weapon_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.icon_name : ""
end
#--------------------------------------------------------------------------
# ● 遠距離アニメーション取得
#--------------------------------------------------------------------------
def flying_anime1
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.flying_anime : [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 遠距離アニメーション取得
#--------------------------------------------------------------------------
def flying_anime2
weapon = $data_weapons[@weapon2_id]
return weapon != nil ? weapon.flying_anime : [0,0,false,false]
end
#--------------------------------------------------------------------------
# ● 移動目標座標の計算
#--------------------------------------------------------------------------
def move_setup
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
case @move_action[0]
when "self" # 自分
@target_x = self.base_x
@target_y = self.base_y
when "target_near" # 一番近くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
targets.reverse!
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target_far" # 一番遠くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target" # ターゲット中央
@target_x = 0
@target_y = 0
for t in targets
@target_x += t.screen_x
@target_y += t.screen_y
end
if targets != []
@target_x /= targets.size
@target_y /= targets.size
end
when "troop" # "トループ中央"
@target_x = 0
@target_y = 0
for t in $game_troop.enemies
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_troop.enemies != []
@target_x /= $game_troop.enemies.size
@target_y /= $game_troop.enemies.size
end
when "party" # "パーティ中央"
@target_x = 0
@target_y = 0
for t in $game_party.actors
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_party.actors != []
@target_x /= $game_party.actors.size
@target_y /= $game_party.actors.size
end
when "screen" # "画面"
@target_x = self.base_x
@target_y = self.base_y
end
# 補正
@target_x += @move_action[1] - self.base_x
@target_y += @move_action[2] - self.base_y
# 移動目標の座標をセット
@move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
# 距離の計算(ウエイトの設定)
@move_wait = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias side_view_initialize initialize
def initialize(troop_id, member_index)
side_view_initialize(troop_id, member_index)
start_battle
end
#--------------------------------------------------------------------------
# ● 移動
#--------------------------------------------------------------------------
def move
# 距離の計算
@move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
if @move_distance > 0
return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
array = @move_coordinates
# ジャンプ補正値の計算
n = 100.0 * @move_wait / @move_distance
jump = -@move_action[4] * n * (100 - n) / 100.0
@ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
@oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
# ウエイト
@move_wait -= @move_action[3]
@move_wait = [@move_wait,0].max
end
end
#--------------------------------------------------------------------------
# ● 移動目標座標の計算
#--------------------------------------------------------------------------
def move_setup
if RTAB
targets = @target
else
targets = $scene.target_battlers
end
case @move_action[0]
when "self" # 自分
@target_x = self.base_x
@target_y = self.base_y
when "target_near" # 一番近くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target_far" # 一番遠くのターゲット
targets.sort!{|a,b| a.screen_x<=>b.screen_x }
targets.reverse!
if targets != []
@target_x = targets[0].screen_x
@target_y = targets[0].screen_y
else
@target_x = self.base_x
@target_y = self.base_y
end
when "target" # ターゲット中央
@target_x = 0
@target_y = 0
for t in targets
@target_x += t.screen_x
@target_y += t.screen_y
end
if targets != []
@target_x /= targets.size
@target_y /= targets.size
end
when "party" # "トループ中央"
@target_x = 0
@target_y = 0
for t in $game_troop.enemies
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_troop.enemies != []
@target_x /= $game_troop.enemies.size
@target_y /= $game_troop.enemies.size
end
when "troop" # "パーティ中央"
@target_x = 0
@target_y = 0
for t in $game_party.actors
@target_x += t.screen_x
@target_y += t.screen_y
end
if $game_party.actors != []
@target_x /= $game_party.actors.size
@target_y /= $game_party.actors.size
end
when "screen" # "画面"
@target_x = self.base_x
@target_y = self.base_y
end
# 補正
@target_x -= @move_action[1] + self.base_x
@target_y -= @move_action[2] + self.base_y
# 移動目標の座標をセット
@move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
# 距離の計算(ウエイトの設定)
@move_wait = (@move_coordinates[2] - @move_coordinates[0]).abs +
(@move_coordinates[3] - @move_coordinates[1]).abs
end
if RTAB
alias original_x true_x
alias original_y true_y
else
alias original_x screen_x
alias original_y screen_y
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_x
return original_x + @ox
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(カメラ補正無し)
#--------------------------------------------------------------------------
def true_y
return original_y - @height / 2 + @oy
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得
#--------------------------------------------------------------------------
def screen_x(true_x = self.true_x)
return true_x * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得
#--------------------------------------------------------------------------
def screen_y(true_y = self.true_y)
return true_y * @real_zoom + @real_y
end
#--------------------------------------------------------------------------
# ● バトル画面 X 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_x(true_x = self.true_x)
return (true_x - @ox) * @real_zoom + @real_x
end
#--------------------------------------------------------------------------
# ● バトル画面 Y 座標の取得(移動などしていない場合)
#--------------------------------------------------------------------------
def base_y(true_y = self.true_y)
return (true_y - @oy) * @real_zoom + @real_y
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アクターを加える
# actor_id : アクター ID
#--------------------------------------------------------------------------
alias side_view_add_actor add_actor
def add_actor(actor_id)
# アクターを取得
actor = $game_actors[actor_id]
# サイドビューデータの初期化
actor.start_battle
# 戻す
side_view_add_actor(actor_id)
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
include Side_view
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :phase # フェーズ
attr_reader :phase4_step # フェーズ4ステップ
attr_reader :active_battler # 対象の配列
attr_reader :target_battlers # 対象の配列
attr_reader :animation1_id # 行動アニメID
attr_reader :animation2_id # 対象アニメID
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias side_view_main main
def main
# バトラー初期化
for battler in $game_party.actors + $game_troop.enemies
battler.start_battle
end
# 戻す
side_view_main
end
#--------------------------------------------------------------------------
# ● 閃き判定
#--------------------------------------------------------------------------
def flash?
return @flash_flag ? true : false
end
#--------------------------------------------------------------------------
# ● 閃きアニメ待ち時間取得
#--------------------------------------------------------------------------
def flash_duration
animation = nil
if FLASH_ANIME
animation = $data_animations[FLASH_ANIMATION_ID]
end
return animation != nil ? animation.frame_max * 2 + 2 : 0
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step2 update_phase4_step2
def update_phase4_step2(*arg)
battler = convert_battler2(*arg)
battler.action
side_view_update_phase4_step2(*arg)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step3 update_phase4_step3
def update_phase4_step3(*arg)
battler = convert_battler2(*arg)
return if !battler.animation1_on and battler.action? and !battler.flash?
if battler.flash? and FLASH_ANIME
battler.flash_flag["normal"] = true
end
side_view_update_phase4_step3(*arg)
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
#--------------------------------------------------------------------------
alias side_view_update_phase4_step4 update_phase4_step4
def update_phase4_step4(*arg)
battler = convert_battler2(*arg)
targets = RTAB ? battler.target : @target_battlers
return if !battler.animation2_on and battler.action?
side_view_update_phase4_step4(*arg)
for target in targets
if RTAB
value = nil
if target.damage_sp.include?(battler)
value = target.damage_sp[battler]
end
if target.damage.include?(battler)
if value == nil or value == "Miss"
value = target.damage[battler]
elsif value.is_a?(Numeric) && value > 0
value = target.damage[battler] == "Miss" ? value : target.damage[battler]
end
end
else
value = target.damage
end
if target.is_a?(Game_Actor)
# ダメージの場合
if value.is_a?(Numeric) && value > 0
# シェイクを開始
target.shake = true
end
elsif target.is_a?(Game_Enemy)
# ダメージの場合
if value.is_a?(Numeric) && value > 0
# シェイクを開始
target.shake = true
end
end
end
end
#--------------------------------------------------------------------------
# ● プレバトルフェーズ開始
#--------------------------------------------------------------------------
alias start_phase1_correct start_phase1
def start_phase1
# カメラの設定
# 元々フロントビュー向けの数値になっているため
@zoom_rate = [1.0, 1.0]
start_phase1_correct
end
#--------------------------------------------------------------------------
# ● アクターコマンドフェーズ開始
#--------------------------------------------------------------------------
alias start_phase3_correct start_phase3
def start_phase3
battler = convert_battler
start_phase3_correct
if RTAB
# カメラの設定
# 元々フロントビュー向けの数値になっているため
@camera = "command"
@spriteset.screen_target(0, 0, 1.0)
end
end
end
class Spriteset_Battle
include Side_view
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias side_veiw_initialize initialize
def initialize
side_veiw_initialize
# アクタースプライトを解放
for sprite in @actor_sprites
sprite.dispose
end
# アクタースプライトを作成
@actor_sprites = []
for i in 1..Party_max
@actor_sprites.push(Sprite_Battler.new(@viewport1))
end
update
end
#--------------------------------------------------------------------------
# ● 画面のスクロール
#--------------------------------------------------------------------------
if method_defined?("screen_scroll")
alias side_view_screen_scroll screen_scroll
def screen_scroll
side_view_screen_scroll
# アクターの位置補正
for actor in $game_party.actors
actor.real_x = @real_x
actor.real_y = @real_y
actor.real_zoom = @real_zoom
end
end
end
end
class Sprite_Battler < RPG::Sprite
include Side_view
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@weapon = Sprite_Weapon.new(viewport, battler)
@flying = Sprite_Flying.new(viewport, battler)
@shadow = []
@fly = 0
@fly_direction = 1
@rand = rand(10)
@bitmaps = {}
self.effect_clear
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias side_view_dispose dispose
def dispose
side_view_dispose
@weapon.dispose if @weapon != nil
@flying.dispose if @flying != nil
if @_target_sprite != nil
@_target_sprite.bitmap.dispose
@_target_sprite.dispose
@_target_sprite = nil
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
@weapon.bitmap = nil
loop_animation(nil)
return
end
# バトラー更新
@battler.update
# バトラーアニメのデータ取得
@anime_type = @battler.anime_type
# bitmap をキャッシュ化
path = @anime_type[0].to_s + "#" + @battler.pattern.to_s
if not @bitmaps.include?(path) or @bitmaps[path].disposed?
# ファイル名か色相が現在のものと異なる場合
if @battler.is_a?(Game_Actor)
change = (@battler.character_name != @battler_name or @battler.character_hue != @battler_hue)
elsif @battler.is_a?(Game_Enemy)
change = (@battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue)
end
if change
# ビットマップを取得、設定
if @battler.is_a?(Game_Actor)
@battler_name = @battler.character_name
@battler_hue = @battler.character_hue
@bitmap = RPG::Cache.character(@battler_name, @battler_hue)
@width = @bitmap.width / 4
@height = @bitmap.height / 4
else
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
@bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = @bitmap.width
@height = @bitmap.height
@bitmaps["No_Motion"] = @bitmap
end
self.ox = @width / 2
self.oy = @height / 2
@battler.height = @height
@flag = true
# 戦闘不能または隠れ状態なら不透明度を 0 にする
if @battler.dead? or @battler.hidden
self.opacity = 0
end
end
if @battler.is_a?(Game_Actor) and (@anime_type[0] != @battler_condition or
@battler.pattern != @battler_pattern or flag)
# ビットマップを取得、設定
@battler_condition = @anime_type[0]
@battler_pattern = @battler.pattern
@sx = @battler.pattern * @width
@sy = @anime_type[0] % 4 * @height
self.bitmap = Bitmap.new(@width,@height)
self.bitmap.blt(0,0, @bitmap,Rect.new(@sx, @sy, @width, @height))
@bitmaps[path] = self.bitmap
flag = false
end
end
if @battler.is_a?(Game_Actor)
self.bitmap = @bitmaps[path]
else
self.bitmap = @bitmaps["No_Motion"]
end
# 飛行
update_fly
# シェイク
update_shake
# 回転
update_turning
# 反転
update_reverse
# 移動
update_moving
# 追加アニメ
update_add_anime
# エフェクト効果の適用
update_effect
# アニメーション ID が現在のものと異なる場合
flag = RTAB ? true : @battler.damage == nil
if flag and @battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# シェイク
if @battler.shake
self.start_shake(5, 5, 5)
@battler.shake = false
end
# 明滅
if @battler.blink
blink_on
else
blink_off
end
# 不可視の場合
unless @battler_visible
flag = RTAB ? (@battler.damage.size < 2 or @battler.damage_pop.size < 2) :
(@battler.damage == nil or @battler.damage_pop)
# 出現
if not @battler.hidden and not @battler.dead? and flag
appear
@battler_visible = true
end
end
if RTAB
# ダメージ
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
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
if RTAB
# アニメーション
if !@battler.animation.empty?
for animation in @battler.animation.reverse
if animation[2]
animation($data_animations[animation[0]], animation[1], true)
else
animation($data_animations[animation[0]], animation[1])
end
@battler.animation.delete(animation)
end
end
else
# アニメーション
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
animation(animation, @battler.animation_hit)
@battler.animation_id = 0
end
end
# ダメージ
if !RTAB and @battler.damage_pop
damage(@battler.damage, @battler.critical)
@battler.damage = nil
@battler.critical = false
@battler.damage_pop = false
end
flag = RTAB ? (@battler.damage.empty? and $scene.dead_ok?(@battler)) :
@battler.damage == nil
# コラプス
if flag and @battler.dead?
if @battler.is_a?(Game_Actor)
$game_system.se_play($data_system.actor_collapse_se)
elsif @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
end
collapse
@battler_visible = false
end
end
# スプライトの座標を設定
self.x = @battler.screen_x + @effect_ox
self.y = @battler.screen_y + @effect_oy
self.z = @battler.screen_z
self.zoom_x = @battler.real_zoom
self.zoom_y = @battler.real_zoom
# ウェイトカウントを減らす
@battler.wait_count -= 1
@battler.wait_count2 -= 1
# アニメーション待ち時間取得
@battler.animation_duration = @_animation_duration
if @battler.is_a?(Game_Actor)
self.zoom_x *= CHAR_ZOOM
self.zoom_y *= CHAR_ZOOM
end
# 遠距離アニメ
if @battler.flying_anime != [0,0,false,false] and @flying.nil?
@flying = Sprite_Flying.new(self.viewport, @battler)
elsif @battler.flying_anime == [0,0,false,false] and !@flying.nil?
@flying.dispose
@flying = nil
end
if @flying != nil
@flying.battler = @battler
@flying.update
end
if @battler.is_a?(Game_Actor)
# 武器アニメ
if @battler.weapon_anime_type1 and @weapon.nil?
@weapon = Sprite_Weapon.new(self.viewport, @battler)
elsif !@battler.weapon_anime_type1 and !@weapon.nil?
@weapon.dispose
@weapon = nil
end
if @weapon != nil
@weapon.battler = @battler
@weapon.update
@weapon.opacity = self.opacity
@weapon.x = self.x + BLZ_X[@battler.weapon_anime_type3][@battler.pattern]
@weapon.y = self.y + BLZ_Y[@battler.weapon_anime_type3][@battler.pattern]
@weapon.angle = BLZ_ANGLE[@battler.weapon_anime_type3][@battler.pattern]
if self.mirror
@weapon.angle += @weapon.angle - 180
end
end
end
# 残像
if @battler.shadow
if Graphics.frame_count % 2 == 0
shadow = ::Sprite.new(self.viewport)
shadow.bitmap = self.bitmap.dup
shadow.x = self.x
shadow.y = self.y
shadow.ox = self.ox
shadow.oy = self.oy
shadow.mirror = self.mirror
shadow.angle = self.angle
shadow.opacity = 160
shadow.zoom_x = self.zoom_x
shadow.zoom_y = self.zoom_y
if @battler.is_a?(Game_Actor)
shadow.src_rect.set(@sx, @sy, @width, @height)
else
shadow.src_rect.set(0, 0, @width, @height)
end
@shadow.push([shadow,duration = 10,@battler.true_x + @effect_ox,@battler.true_y + @effect_oy])
end
end
for s in @shadow
if !s[0].disposed?
s[0].update
s[1] -= 1
if s[1] < 1
if s[0].bitmap != nil
s[0].bitmap.dispose
end
s[0].dispose
else
s[0].x = @battler.screen_x(s[2])
s[0].y = @battler.screen_y(s[3])
end
else
s = nil
end
end
@shadow.compact!
end
#--------------------------------------------------------------------------
# ● エフェクトによる座標系の更新
#--------------------------------------------------------------------------
def update_effect
# 角度の修正
if @_upside_down
self.angle = (@_turning + 180) % 360
else
self.angle = @_turning
end
# X 座標の修正値
@effect_ox = @_shake + @_moving[0]
# Y 座標の修正値
@effect_oy = -@fly + @_moving[1]
if @_animation == nil or (RTAB and @_animation.empty?)
self.effect_clear
end
end
#--------------------------------------------------------------------------
# ● シェイク更新
#--------------------------------------------------------------------------
def update_shake
if @_shake_duration >= 1 or @_shake != 0
delta = (@_shake_power * @_shake_speed * @_shake_direction) / 10.0
if @_shake_duration <= 1 and @_shake * (@_shake + delta) < 0
@_shake = 0
else
@_shake += delta
end
if @_shake > @_shake_power * 2
@_shake_direction = -1
end
if @_shake < - @_shake_power * 2
@_shake_direction = 1
end
if @_shake_duration >= 1
@_shake_duration -= 1
end
end
end
#--------------------------------------------------------------------------
# ● 飛行更新
#--------------------------------------------------------------------------
def update_fly
if @rand > 0
@rand -= 1
return
end
if @battler.fly != 0
if @fly < @battler.fly / 4
@fly_direction = 1
elsif @fly > @battler.fly / 2
@fly_direction = -1
end
@fly += 0.5 * @fly_direction
end
end
#--------------------------------------------------------------------------
# ● 回転更新
#--------------------------------------------------------------------------
def update_turning
if @_turning_duration > 0 or @_turning != 0
@_turning += @_turning_direction * @_turning_speed / 2.0
# 残り回転数を減らす
if @_turning_direction == -1
if @_turning_duration > 0 and @_turning < 0
@_turning_duration -= 1
end
elsif @_turning_direction == 1
if @_turning_duration > 0 and @_turning >= 360
@_turning_duration -= 1
end
end
# 以下補正
while @_turning < 0
@_turning += 360
end
if @_turning_duration <= 0
@_turning = 0
end
@_turning %= 360
end
end
#--------------------------------------------------------------------------
# ● 左右反転更新
#--------------------------------------------------------------------------
def update_reverse
if @last_reverse != (@_reverse or @battler.reverse)
self.mirror = (@_reverse or @battler.reverse)
@last_reverse = (@_reverse or @battler.reverse)
end
end
#--------------------------------------------------------------------------
# ● 移動更新
#--------------------------------------------------------------------------
def update_moving
@move_distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
(@_move_coordinates[3] - @_move_coordinates[1]).abs
if @move_distance > 0
return if @_moving[0] == @_move_coordinates[0] and @_moving[1] == @_move_coordinates[1]
array = @_move_coordinates
x = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
y = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
@_moving = [x, y]
if @_move_quick_return and @_move_duration == 0
@_move_coordinates = [0,0,array[0],array[1]]
@_move_duration = @move_distance
end
@_move_duration -= @_move_speed
@_move_duration = [@_move_duration, 0].max
end
end
#--------------------------------------------------------------------------
# ● 追加アニメ更新 (RTAB限定機能)
#--------------------------------------------------------------------------
def update_add_anime
if RTAB
# アニメーション
if @_add_anime_id != 0
animation = $data_animations[@_add_anime_id]
animation(animation, true)
@_add_anime_id = 0
end
end
end
#--------------------------------------------------------------------------
# ● エフェクト初期化
#--------------------------------------------------------------------------
def effect_clear
@_effect_ox = 0
@_effect_oy = 0
@_shake_power = 0
@_shake_speed = 0
@_shake_duration = 0
@_shake_direction = 1
@_shake = 0
@_upside_down = false
@_reverse = false
@_turning_direction = 1
@_turning_speed = 0
@_turning_duration = 0
@_turning = 0
@_move_quick_return = true
@_move_speed = 0
@_move_coordinates = [0,0,0,0]
@_move_jump = false
@_move_duration = 0
@_moving = [0,0]
@_add_anime_id = 0
end
#--------------------------------------------------------------------------
# ● シェイクの開始
# power : 強さ
# speed : 速さ
# duration : 時間
#--------------------------------------------------------------------------
def start_shake(power, speed, duration)
@_shake_power = power
@_shake_speed = speed
@_shake_duration = duration
end
#--------------------------------------------------------------------------
# ● 上下反転を開始
#--------------------------------------------------------------------------
def start_upside_down
@_upside_down = @_upside_down ? false : true
end
#--------------------------------------------------------------------------
# ● 左右反転を開始
#--------------------------------------------------------------------------
def start_reverse
@_reverse = @_reverse ? false : true
end
#--------------------------------------------------------------------------
# ● 回転を開始
# direction: 方向
# speed : 速さ
# duration : 時間
#--------------------------------------------------------------------------
def start_turning(direction, speed, duration)
@_turning_direction = direction
@_turning_speed = speed
@_turning_duration = duration
@_turning = @_turning_direction == 1 ? 0 : 360
end
#--------------------------------------------------------------------------
# ● 移動を開始
# quick_return : 戻るかどうか
# speed : 速さ
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def start_moving(quick_return, speed, x, y)
@_move_quick_return = quick_return == 0 ? false : true
@_move_speed = speed
@_move_coordinates = [x,y,@_move_coordinates[0],@_move_coordinates[1]]
distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
(@_move_coordinates[3] - @_move_coordinates[1]).abs
@_move_duration = distance
end
#--------------------------------------------------------------------------
# ● アニメ追加を開始
# id : ID
# hit : 命中フラッグ
#--------------------------------------------------------------------------
def start_add_anime(id)
@_add_anime_id = id
end
#--------------------------------------------------------------------------
# ● 各種エフェクトの開始判定
#--------------------------------------------------------------------------
if !method_defined?("side_view_animation_process_timing")
alias side_view_animation_process_timing animation_process_timing
end
def animation_process_timing(timing, hit)
side_view_animation_process_timing(timing, hit)
if (timing.condition == 0) or
(timing.condition == 1 and hit == true) or
(timing.condition == 2 and hit == false)
if timing.se.name =~ SHAKE_FILE
names = timing.se.name.split(/#/)
power = names[1].nil? ? SHAKE_POWER : names[1].to_i
speed = names[2].nil? ? SHAKE_SPEED : names[2].to_i
duration = names[3].nil? ? SHAKE_DURATION : names[3].to_i
# シェイクを開始
self.start_shake(power, speed, duration)
end
if timing.se.name == UPSIDE_DOWN_FILE
# 上下反転を開始
self.start_upside_down
end
if timing.se.name == REVERSE_FILE
# 左右反転を開始
self.start_reverse
end
if timing.se.name =~ TURNING_FILE
names = timing.se.name.split(/#/)
direction = names[1].nil? ? TURNING_DIRECTION : names[1].to_i
speed = names[2].nil? ? TURNING_SPEED : names[2].to_i
duration = names[3].nil? ? TURNING_DURATION : names[3].to_i
# 回転を開始
self.start_turning(direction, speed, duration)
end
if timing.se.name =~ MOVE_FILE
names = timing.se.name.split(/#/)
quick_return= names[1].nil? ? MOVE_RETURN : names[1].to_i
speed = names[2].nil? ? MOVE_SPEED : names[2].to_i
x = names[3].nil? ? MOVE_COORDINATES[0] : names[3].to_i
y = names[3].nil? ? MOVE_COORDINATES[1] : names[4].to_i
# 移動を開始
self.start_moving(quick_return, speed, x, y)
end
if timing.se.name =~ ADD_ANIME_FILE
names = timing.se.name.split(/#/)
id = names[1].nil? ? ADD_ANIME_ID : names[1].to_i
# アニメ追加を開始
self.start_add_anime(id)
end
end
end
end
#==============================================================================
# ■ Sprite_Weapon
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Weapon < ::Sprite
include Side_view
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :battler # バトラー
attr_reader :cw # グラフィックの幅
attr_reader :ch # グラフィックの高さ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil or !@battler.is_a?(Game_Actor)
self.bitmap = nil
return
end
# ウエポンアニメのデータ取得
@weapon_anime_type = @battler.weapon_anime_type
# 設定が「非表示」の場合
if !@weapon_anime_type[1] or @weapon_anime_type[0].nil?
self.visible = false
return
else
self.visible = true
end
# ファイル名が現在のものと異なる場合
if @weapon_anime_type[0] != @weapon_name
@weapon_name = @weapon_anime_type[0]
# ビットマップを取得、設定
self.bitmap = RPG::Cache.icon(@weapon_name)
@width = bitmap.width
@height = bitmap.height
@flag = true
end
# 現在アニメパターンが現在のものと異なる場合
if @pattern != @battler.pattern or @flag or @condition != @battler.condition
@pattern = @battler.pattern
@condition = @battler.condition
self.ox = @width
self.oy = @height
self.z = battler.screen_z
self.zoom_x = @battler.real_zoom * CHAR_ZOOM
self.zoom_y = @battler.real_zoom * CHAR_ZOOM
self.src_rect.set(0, 0, @width, @height)
self.opacity = 255
# バトラーより手前に表示
if @weapon_anime_type[2]
self.z += 10
# バトラーより奥に表示
else
self.z -= 10
end
@flag = false
end
end
end
#==============================================================================
# ■ Sprite_Flying
#------------------------------------------------------------------------------
# バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
# スプライトの状態を自動的に変化させます。
#==============================================================================
class Sprite_Flying < RPG::Sprite
include Side_view
LATE_COUNT = 20
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :battler # バトラー
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# viewport : ビューポート
# battler : バトラー (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@later = LATE_COUNT
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# 遠距離アニメ
flying_animation = @battler.flying_animation
flying_start = flying_animation[0]
flying_end = flying_animation[1]
# アニメーション ID が現在のものと異なる場合
if @anime_id != @battler.flying_anime[0]
@anime_id = @battler.flying_anime[0]
@animation = $data_animations[@anime_id]
end
# アニメーション 開始
if flying_start
animation(@animation,true)
elsif flying_end
# 消去を遅らせてみたりする
@later -= 1
if @later < 0
animation(nil, true)
@later = LATE_COUNT
end
end
self.x = @battler.flying_x
self.y = @battler.flying_y
self.z = @battler.screen_z + 1000
end
end
module RPG
class Skill
#--------------------------------------------------------------------------
# ● 魔法かどうかの判断
#--------------------------------------------------------------------------
def magic?
if @atk_f == 0
return true
else
return false
end
end
end
end
# アローカーソルの位置修正
class Arrow_Actor < Arrow_Base
include Side_view
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias side_view_update update
def update
side_view_update
# スプライトの座標を設定
if self.actor != nil && (self.x != self.actor.screen_x + ARROW_OX or self.y != self.actor.screen_y + ARROW_OY)
self.x = self.actor.screen_x + ARROW_OX
self.y = self.actor.screen_y + ARROW_OY
end
end
end
class Arrow_Enemy < Arrow_Base
include Side_view
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias side_view_update update
def update
side_view_update
# スプライトの座標を設定
if self.enemy != nil && self.y != self.enemy.screen_y + self.enemy.height/2
self.x = self.enemy.screen_x
self.y = self.enemy.screen_y + self.enemy.height/2
end
end
end
Messaggio modificato da Sephirotto, 16 settembre 2007 - 11:35
#3
Inviato 16 settembre 2007 - 11:41
Grazie!!!!!!!!!!
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#5
Inviato 16 settembre 2007 - 11:47
grande! cercavo proprio una cosa del genere. Il problema
I don't want to cross over,
between this genre, that genre.
Between you and I's where,
I want to cross over, cross the line.
I just want to go further,
between here and there, grow wiser.
Together you and I,
We can cross our borders, you and I.
Only...only...only....ahh...
between this genre, that genre.
Between you and I's where,
I want to cross over, cross the line.
I just want to go further,
between here and there, grow wiser.
Together you and I,
We can cross our borders, you and I.
Only...only...only....ahh...
You are always gonna be my love
Itsu ka dare ka to mata koi ni ochite mo
I'll remember to love, you taught me how
You are always gonna be the one
Ima wa mada kanashii love song
Atarashii uta utaeru made
Itsu ka dare ka to mata koi ni ochite mo
I'll remember to love, you taught me how
You are always gonna be the one
Ima wa mada kanashii love song
Atarashii uta utaeru made
Thorough mountains high and valleys low
The ocean, through the desert, snow
We'll say goodbye to the friends we know,
This is our exodus '04
Through traffic jams in Tokyo
New music on the radio
We'll say goodbye to the world we know,
This is our exodus '04
The ocean, through the desert, snow
We'll say goodbye to the friends we know,
This is our exodus '04
Through traffic jams in Tokyo
New music on the radio
We'll say goodbye to the world we know,
This is our exodus '04
Anata no shiawase negau hodo wagamama ga fueteku yo
Soredemo anata wo hikitometai itsu datte sou
Dareka no negai ga kanau koro ano ko ga naiteru yo
Sono mama tobira no oto wa naranai
Soredemo anata wo hikitometai itsu datte sou
Dareka no negai ga kanau koro ano ko ga naiteru yo
Sono mama tobira no oto wa naranai
#6
Inviato 16 settembre 2007 - 11:49
Ma si possono spostare un p
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#9
Inviato 16 settembre 2007 - 05:49
#10
Inviato 17 settembre 2007 - 11:30
Grazie lorenmann,cercher
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#12
Inviato 18 settembre 2007 - 01:40
Ma ora non sta un p
Messaggio modificato da Zen, 18 settembre 2007 - 01:50
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#14
Inviato 19 settembre 2007 - 06:51
Meglio a eventi,tenter
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
#19
Inviato 20 settembre 2007 - 06:18
Si comunque so utilizzare le basi del rpgmaker xp(sono vissuto con il 2000 e 2003)!!!!
Grazie comunque se mi servir
Grazie comunque se mi servir
Dalle fiamme rosse e blu compaiono due guerrieri.....Siete pronti per l'eterna lotta fra la fiamma blu e la fiamma rossa????
"T2F"The Two Flames:La leggenda delle due fiammeGioco realizzato per RPGMAKER XP 1.02 con il nuovissimo e unico MBS(Multi-Battle-Sistem)......Prima demo del Bs......
http://lnx.phantomca...?showtopic=2009
0 utente(i) stanno leggendo questa discussione
0 utenti, 0 visitatori, 0 utenti anonimi