カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

最近のコメント

最近の記事

カテゴリー

リンク

このブログをリンクに追加する

月別アーカイブ

アクセスカウンター

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[--/--/-- --:--] | スポンサー広告
パーティアタックを作るぞ
 

 さて、続いてパーティーアタックの実装に入る。

 FFでは当たり前の世界。うっかり味方にブレイク、ブレクガアタックでござる。

 まず、選択ロジックだが、どうやって探すか・・・・

 あれだ、データベースのアイテムとかで、全体とか、単体とか指定しているところがあるべ。
 きっと、スクリプトでそのパラメーターを判断しているところがあるだよ。

 調べるとRPG::UsableItem.scopeがそれだな。
 よし、こいつを検索だ。

 おりょ、引っかからんよ。

 ならば「戦う」とかコマンド実行するところを探してみよう。

 これは引っかかった。BattleManagerでバトルの処理を行ってるようだ


↓ここで戦うコマンド入力開始
Scene_Battle.command_fight

↓ここでメニューハンドラーを渡しているようだ
Scene_Battle.create_party_command_window

↓ここでアクターコマンドウィンドウの作成しているっぽい
Scene_Battle.create_actor_command_window

↓ここで「攻撃」
Scene_Battle.command_attack

↓これで味方選択
Scene_Battle.select_actor_selection

↓これで敵選択
select_enemy_selection

↓となると仮説。Scene_Battleを下のように変更すると、パーティー攻撃しかできなくなるのでは?。
#--------------------------------------------------------------------------
# ● コマンド[攻撃]
#--------------------------------------------------------------------------
def command_attack
BattleManager.actor.input.set_attack
select_actor_selection 味方キャラ選択を追加
#select_enemy_selection ←敵キャラ選択はコメントアウト
end

選択は変わったが、実際にバトルが始まるとパーティアタックは行われなかったよ。

もう少し調査してみよう。

↓で敵キャラ決定の処理をしているらしい。
Scene_Battle.on_enemy_ok
#--------------------------------------------------------------------------
# ● 敵キャラ[決定]
#--------------------------------------------------------------------------
def on_enemy_ok
BattleManager.actor.input.target_index = @enemy_window.enemy.index
@enemy_window.hide
@skill_window.hide
@item_window.hide
next_command
end
※BattleManager.actorはGame_Actor
※BattleManager.actor.input はGame_Action


わかったこと
・アクションはGame_Actionで決定する。
・敵/味方を選択するウィンドでは敵/味方のIndexしか取得できない。敵か味方かはチェックしてない。


では、Game_Action.@target_indexが実際に操作されるのはどこだ?
調べてみる

↓敵に対するターゲットはここで決定する
Game_Action.targets_for_opponents

↓味方に対するターゲットはここで決定する
Game_Action.targets_for_friends

↓ここで敵味方を分けているっぽい
Game_Action.make_targets

↓となると仮説、以下にすれば戦闘中は味方しか戦えないはず
#--------------------------------------------------------------------------
# ● ターゲットの配列作成
#--------------------------------------------------------------------------
def make_targets
if !forcing && subject.confusion?
[confusion_target]
elsif item.for_opponent?
#targets_for_opponents←敵の選択判断をコメントアウト
targets_for_friends←味方の選択判断を追加
elsif item.for_friend?
targets_for_friends
else
[]
end
end

と思ったらエラーになった。
なぜだ。targets_for_friendsを調べてみる。
#--------------------------------------------------------------------------
# ● 味方に対するターゲット
#--------------------------------------------------------------------------
def targets_for_friends
if item.for_user? ← 使用者?
[subject]
elsif item.for_dead_friend? ← 戦闘不能の味方?
if item.for_one? ← 単体?
[friends_unit.smooth_dead_target(@target_index)]
else
friends_unit.dead_members
end
elsif item.for_friend? ← 味方?
if item.for_one? ← 単体?
[friends_unit.smooth_target(@target_index)]
else ← 全体
friends_unit.alive_members
end
end
end

[elsif item.for_friend?]で味方かどうか調べてる。
味方じゃないと判断したら、この関数はnilを戻すようになっとった。
↓じゃ、こうすればいいんじゃね。
#--------------------------------------------------------------------------
# ● 味方に対するターゲット
#--------------------------------------------------------------------------
def targets_for_friends
if item.for_user?
[subject]
elsif item.for_dead_friend?
if item.for_one?
[friends_unit.smooth_dead_target(@target_index)]
else
friends_unit.dead_members
end
else#if item.for_friend? ← コメントアウト
if item.for_one?
[friends_unit.smooth_target(@target_index)]
else
friends_unit.alive_members
end
end
end

想定通り、戦闘中全員味方を攻撃しだした。

ということで、パーティーアタックをするときは・・・・
1.Window選択で、敵、味方を選べるようにする。
2.選んだあとはGame_Actionに選んだのは味方であるか、敵であるかを記録する。
3.targets_for_opponents/targets_for_friendsでうまいことやる(←なんだよ、それ)


という感じで実装すればよいのだ。
スポンサーサイト
[2014/08/09 18:43] | ペトリケーション2 | コメント(0)
<<パーティアタック実装してみた | ホーム | 俺的メモ>>
コメント
コメントの投稿












管理者にだけ表示を許可する

牙行の色々やること


Maiki's House運営者牙行のブログです。

プロフィール

牙行

Author:牙行
ASFR & WAM を重点的に扱っています。いろいろなことに興味を持つゆえにフラフラしているダメ人間。
定型句ではありますが書いときます。
このブログにあるコンテンツの無断転載転用だめですよぉ。

pixiv

Twitter...

DLSite.com

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。