SRC質問掲示板Mk2

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 親記事をトピックトップへ ]

このトピックに書きこむ

■22889 / inTopicNo.1)  Re[6]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
  
□投稿者/ Shun -(2016/03/08(Tue) 21:59:01) [ID:nE4DXYig]
    お答えいただいたインクルで、何とか想定通りの動きになることができました。
    長らくお付き合いいただきましてありがとうございました。
解決済み!
引用返信/返信 削除キー/
■22888 / inTopicNo.2)  Re[5]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ dip -(2016/03/08(Tue) 18:39:56) [ID:2NS206kI]
    2016/03/19(Sat) 23:25:21 編集(投稿者)
    行動回数の不具合は気付いていたのですが、すかっり直すのを忘れていました…
    
    // ここで使用する変数を設定。
    使用 味方 神隠し:
    Set 神隠しフラグ 1
    Set 神隠し使用者 対象ユニットID
    // とりあえずHP、EN、気力、行動回数の情報を記録。HP、EN、気力は武器属性での増減対策。
    Set 神隠し前HP[対象ユニットID] HP(対象ユニットID)
    Set 神隠し前EN[対象ユニットID] EN(対象ユニットID)
    Set 神隠し前気力[対象ユニットID] Morale(対象ユニットID)
    Set 神隠し前行動回数[対象ユニットID] Action(対象ユニットID)
    // ↓使用したアビリティ情報を記録。
    Set 神隠し使用番号 対象ユニット使用アビリティ番号
    Set 神隠し使用回数 Info(ユニット,対象ユニットID,アビリティ,対象ユニット使用アビリティ番号,使用回数)
    Exit
    
    // ↓味方前提の処理です。それ以外の陣営では使えません。
    使用後 味方 神隠し:
    // ↓で対象者を設定。
    ForEach 全 出撃
    	// 対象:陣営が味方以外。
    	//If (Party(対象ユニットID) <> 味方) Then
    	//	Set 神隠し対象者[対象ユニットID] 1
    	//EndIf
    	// 対象:味方ユニット。分岐:使用者かそれ以外。
    	If (Party(対象ユニットID) = 味方) Then
    		If (対象ユニットID = 神隠し使用者) Then
    			Set 神隠し対象者[対象ユニットID] 2
    		Else
    			Set 神隠し対象者[対象ユニットID] 1
    		EndIf
    	EndIf
    	If (対象ユニットID <> 神隠し使用者) Then
    		Set 神隠し前行動回数[対象ユニットID] Action(対象ユニットID)
    	EndIf
    	// 操作できないように設定する。↓は必須。
    	SetStatus 対象ユニットID 非操作 -1
    Next
    // ↓で対象者がいる場合といない場合の分岐。
    If (Count(神隠し対象者) = 0) Then
    	// 対象者が存在しない場合の処理。
    	Call 神隠し終了処理 2
    Else
    	// 対象者が存在する場合の処理。
    EndIf
    Exit
    
    // 神隠し使用中、ユニットの存在しない箇所で右クリックすれば神隠しをキャンセル。
    マップコマンド 神隠しキャンセル (神隠し終了処理(2) = 1):
    Exit
    
    // Args(1) = 処理フラグ
    // 1 = 神隠し使用
    // 2 = 神隠しキャンセル
    // 3 = 対象者キャンセル
    神隠し終了処理:
    If (神隠しフラグ = 1) Then
    	If (Args(1) = 2) Then
    		// キャンセルの場合、色々復元。
    		Set HP(神隠し使用者) 神隠し前HP[神隠し使用者]
    		Set EN(神隠し使用者) 神隠し前EN[神隠し使用者]
    		Set Action(神隠し使用者) 神隠し前行動回数[神隠し使用者]
    		IncreaseMorale 神隠し使用者 (神隠し前気力[神隠し使用者] - Morale(神隠し使用者))
    		SetStock 神隠し使用者 神隠し使用番号 神隠し使用回数
    	EndIf
    	If (Args(1) <= 2) Then
    		ForEach 全 出撃
    			ClearStatus 対象ユニットID 非操作
    			If (対象ユニットID <> 神隠し使用者) Then
    				Set Action(対象ユニットID) 神隠し前行動回数[対象ユニットID]
    			EndIf
    		Next
    		UnSet 神隠しフラグ
    		UnSet 神隠し使用者
    		UnSet 神隠し対象者
    		UnSet 神隠し前HP
    		UnSet 神隠し前EN
    		UnSet 神隠し前気力
    		UnSet 神隠し前行動回数
    		UnSet 神隠し使用番号
    		UnSet 神隠し使用回数
    	EndIf
    EndIf
    Return 0
    
    ■↓Moveの場合。
    
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] >= 1)):
    //Confirm 神隠しを発動しますか?
    //If (選択 = 1) Then
    	Center 対象ユニットID
    	Wait 5
    	SelectTarget 対象ユニットID
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	// 一時的にユニットを非表示。
    	ChangeUnitBitmap 対象ユニットID 非表示
    	If (神隠し対象者[対象ユニットID] = 2) Then
    		// 状況によっては元の位置に戻る事もあります。
    		If ((X(対象ユニットID) - 1) > 0) Then
    			Move 対象ユニットID (X(対象ユニットID) - 1) Y(対象ユニットID) 非同期
    		ElseIf ((Y(対象ユニットID) - 1) > 0) Then
    			Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) - 1) 非同期
    		ElseIf ((X(対象ユニットID) + 1) < Info(マップ,幅)) Then
    			Move 対象ユニットID (X(対象ユニットID) + 1) Y(対象ユニットID) 非同期
    		ElseIf ((Y(対象ユニットID) + 1) < Info(マップ,高さ)) Then
    			Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) + 1) 非同期
    		EndIf
    	Else
    		Move 対象ユニットID X(神隠し使用者) Y(神隠し使用者) 非同期
    	EndIf
    	Wait 10
    	Center 対象ユニットID
    	SelectTarget 対象ユニットID
    	// ユニットの非表示解除。
    	ChangeUnitBitmap 対象ユニットID 非表示解除
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	Call 神隠し終了処理 1
    //Else
    	// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
    //	Call 神隠し終了処理 3
    //EndIf
    Exit
    
    ■↓Escape、Launchの場合。
    
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] >= 1)):
    //Confirm 神隠しを発動しますか?
    //If (選択 = 1) Then
    	Center 対象ユニットID
    	SelectTarget 対象ユニットID
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	If (神隠し対象者[対象ユニットID] = 2) Then
    		// 状況によっては元の位置に戻る事もあります。
    		If ((X(対象ユニットID) - 1) > 0) Then
    			Move 対象ユニットID (X(対象ユニットID) - 1) Y(対象ユニットID) 非同期
    		ElseIf ((Y(対象ユニットID) - 1) > 0) Then
    			Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) - 1) 非同期
    		ElseIf ((X(対象ユニットID) + 1) < Info(マップ,幅)) Then
    			Move 対象ユニットID (X(対象ユニットID) + 1) Y(対象ユニットID) 非同期
    		ElseIf ((Y(対象ユニットID) + 1) < Info(マップ,高さ)) Then
    			Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) + 1) 非同期
    		EndIf
    	EndIf
    	Escape
    	Wait 10
    	Launch X(神隠し使用者) Y(神隠し使用者) 非同期
    	Center 対象ユニットID
    	SelectTarget 対象ユニットID
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	Call 神隠し終了処理 1
    //Else
    	// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
    //	Call 神隠し終了処理 3
    //EndIf
    Exit

引用返信/返信 削除キー/
■22887 / inTopicNo.3)  Re[4]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ Shun -(2016/03/08(Tue) 07:36:26) [ID:nE4DXYig]
    すみません、前のレスで取り上げた問題点は解決したのですが、
    EscapeとLaunchを用いたインクルを使った場合、
    神隠しの対象者が行動済みだったり覚醒状態や2回行動可能状態も
    Launchで再登場した時点で全てリセットされてしまってます
    (状態異常やステータス付与はLaunchでもそのまま残りました)。
    ただ、これら自体はMoveを使ったインクルであれば、各種状態も維持されたままになるのですが、
    Moveを用いた場合、最初のテレポートアニメの直後にユニットが消えて、
    しばらく経ってからパッと登場するという動きができなくなります。


    // ユニットコマンドで使用の確認。
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
    #Confirm 神隠しを発動しますか?
    #If (選択 = 1) Then
    // 確認が不要なら↓二行だけ残して使用して下さい。
    Center 対象ユニットID
    Wait 5
    SelectTarget 対象ユニットID
    Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    Move 対象ユニットID X(神隠し使用者) Y(神隠し使用者)
    Wait 10
    Center 対象ユニットID
    SelectTarget 対象ユニットID
    Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    Call 神隠し終了処理 1
    #Else
    # // 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
    #Call 神隠し終了処理 3
    #EndIf
    Exit
    #このインクルだと、最初のテレポートアニメの直後にユニットが瞬間移動のごとく移動し、
    #Waitの数値分の待機後、移動箇所でテレポートアニメが遅れて発生する動きとなります。

    Waitを合間に挟んだのは、Waitなしだとテンポが早すぎため、それを遅くしたいのが理由ですが、
    Moveでの移動前にユニットをEscape以外の方法で姿を隠し、
    Moveで移動後、姿を現すのと同時に二度目のテレポートアニメを発動させたいと思っていますが何か方法はあるでしょうか。

    あるいは、EscapeとLaunchのインクルにして、Launchで再登場させる際に
    Escape直前の神隠し対象者の行動回数や各種状態をチェックして
    Launch後にその状態になるようにできる方法があるなら、それも考えてみたいと思います。

    両方の方法のやり方を知っておきたいと思うので、教えていただければと思います。


    また、使用者自身の挙動に関してですが、
    味方ユニットだけが対象の中、例外として使用者自身を神隠しの対象外にする方法と、
    使用者自身も他の味方ユニットと同じく神隠しの対象にするものの、
    移動パターンを使用者以外とは異なるパターンにする方法も教えていただきたいと思います。
    (後者はそのままだと使用者自身は全く移動しないまま神隠しの使用回数を消費するだけになるので、
    例として使用者が現在いる位置から隣接したマスいずれかに移動できるようにしたいと思っています)
引用返信/返信 削除キー/
■22886 / inTopicNo.4)  Re[3]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ dip -(2016/03/08(Tue) 02:37:27) [ID:f1ysFWbr]
    2016/03/08(Tue) 04:21:53 編集(投稿者)
    >選択後キャンセル時のユニットコマンド
    
    以前の処理流れは「神隠し使用>対象選択>使用確認>神隠し発動」で、
    使用確認でキャンセルした場合、対象選択に戻る処理を入れていたので、そこら辺が不具合に見えたんだと思います。
    マスク処理を導入しておけば分かりやすかったと思います。
    
    
    >戦闘アニメエラー
    
    戦闘アニメを見ると、どうやら相手ユニットIDを設定する必要があるようです。
    「戦闘アニメ_防御テレポート1」発動を使用するには「Select」を「SelectTarget」に変更する必要があります。
    ちなみに「Select = 対象ユニットID」「SelectTarget = 相手ユニットID」に設定されます。
    
    
    Shunさんの処理を加えて修正してみました。
    
    
    // ここで使用する変数を設定。
    使用 味方 神隠し:
    Set 神隠しフラグ 1
    Set 神隠し使用者 対象ユニットID
    // ↓使用したアビリティ情報を記録。
    Set 神隠し使用番号 対象ユニット使用アビリティ番号
    Set 神隠し使用回数 Info(ユニット,対象ユニットID,アビリティ,対象ユニット使用アビリティ番号,使用回数)
    Exit
    
    // ↓味方前提の処理です。それ以外の陣営では使えません。
    使用後 味方 神隠し:
    // ↓で対象者を設定。
    ForEach 全 出撃
    	// とりあえず味方の場合は除外。
    	// 条件を変更したい場合は↓を変更して下さい。
    	If (Party(対象ユニットID) <> 味方) Then
    		Set 神隠し対象者[対象ユニットID] 1
    	EndIf
    	// 操作できないように設定する。↓は必須。
    	SetStatus 対象ユニットID 非操作 -1
    Next
    // ↓で対象者がいる場合といない場合の分岐。
    If (Count(神隠し対象者) = 0) Then
    	// 対象者が存在しない場合の処理。
    	Call 神隠し終了処理 2
    Else
    	// 対象者が存在する場合の処理。
    EndIf
    Exit
    
    // ユニットコマンドで使用の確認。
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
    Confirm 神隠しを発動しますか?
    If (選択 = 1) Then
    	// 確認が不要なら↓二行だけ残して使用して下さい。
    	Center 対象ユニットID
    	SelectTarget 対象ユニットID
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	Escape
    	Wait 10
    	Launch X(神隠し使用者) Y(神隠し使用者) 非同期
    	Center 対象ユニットID
    	SelectTarget 対象ユニットID
    	Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    	Call 神隠し終了処理 1
    Else
    	// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
    	Call 神隠し終了処理 2
    EndIf
    Exit
    
    // 神隠し使用中、ユニットの存在しない箇所で右クリックすれば神隠しをキャンセル。
    マップコマンド 神隠しキャンセル (神隠し終了処理(2) = 1):
    Exit
    
    // Args(1) = 処理フラグ
    // 1 = 神隠し使用
    // 2 = 神隠しキャンセル
    // 3 = 対象者キャンセル
    神隠し終了処理:
    If (神隠しフラグ = 1) Then
    	// キャンセルの場合、使用回数を復元。
    	If (Args(1) = 2) Then
    		SetStock 神隠し使用者 神隠し使用番号 神隠し使用回数
    	EndIf
    	If (Args(1) <= 2) Then
    		UnSet 神隠しフラグ
    		UnSet 神隠し使用者
    		UnSet 神隠し対象者
    		UnSet 神隠し使用番号
    		UnSet 神隠し使用回数
    		ForEach 全 出撃
    			ClearStatus 対象ユニットID 非操作
    		Next
    	EndIf
    EndIf
    Return 0

引用返信/返信 削除キー/
■22885 / inTopicNo.5)  Re[2]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ Shun -(2016/03/08(Tue) 00:52:22) [ID:nE4DXYig]
    ありがとうございます。
    お答えいただいたインクルを参考に、Moveコマンドだけでなく、
    以下のようにEscapeとLaunchを用いても同じような動きが再現できました。

    // ユニットコマンドで使用の確認。
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
    Confirm 神隠しを発動しますか?
    If (選択 = 1) Then
    // 確認が不要なら↓二行だけ残して使用して下さい。
    Escape
    Launch X(神隠し使用者) Y(神隠し使用者) 非同期
    Call 神隠し終了処理
    Else
    Cancel
    EndIf
    Exit

    自分としては、お答えいただいたインクルを雛形にしつつ、
    そこから更に移動の直前と直後にワープのアニメーションを加えたく、
    テレポートのアニメーションをインクルに加えたのですが、

    // ユニットコマンドで使用の確認。
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
    Confirm 神隠しを発動しますか?
    If (選択 = 1) Then
    // 確認が不要なら↓二行だけ残して使用して下さい。
    Center 対象ユニットID
    Select 対象ユニットID
    Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    Escape
    Wait 10
    Launch X(神隠し使用者) Y(神隠し使用者) 非同期
    Center 対象ユニットID
    Select 対象ユニットID
    Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
    Call 神隠し終了処理
    Else
    Cancel
    EndIf
    Exit
    #神隠しされる側が消える直前と移動直後に、そのキャラの位置でワープのアニメーションが発動するように調整しました。

    以下のようなエラーが出てしまってアニメーションが機能しなくなってしまいます。

    Lib\汎用戦闘アニメ\GBA_Guard.eve:1758行目
    不正な画像ファイル名「」が指定されています
    1757: ClearPicture
    1758: PaintPicture BMP_FILE B_X B_Y 32 32 透過 T_COL
    1759:

    上記のような状況に対し、テレポートのアニメーションを発動させる方法があれば教えていただきたいと思います。

    また、お答えいただいたインクルの場合、神隠しのアビリティを選んでキャラ選択の段階に入ってからは、
    神隠しの行動そのものをキャンセルして通常の操作に戻ることができないので、
    神隠しの弾数を使用直前の状態に戻しつつ元のユニットコマンドにする方法があれば教えていただけないでしょうか?
引用返信/返信 削除キー/
■22884 / inTopicNo.6)  Re[1]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ dip -(2016/03/07(Mon) 17:16:40) [ID:rQmApr0S]
    2016/03/07(Mon) 17:36:57 編集(投稿者)

    イベントラベルやサブルーチン内で処理すると、応援や祝福のような操作性は再現できません。
    参考までに下記のような処理なら、応援や祝福のような操作性で使用できると思います。
    それと32×32の網目の画像を用意して、マスク表示用のサブルーチンを作成して「// 使用者が存在する場合の処理。」に導入すれば、それっぽく見えるかも知れませんね。
    ただどうしてもこの処理だと選択の際に移動範囲なども表示されてしまいますが…

    変数やサブルーチン名は適当に付けているので、必要なら変更して下さい。


    // ↓味方前提の処理です。それ以外の陣営では使えません。
    使用後 味方 神隠し:
    Set 神隠しフラグ 1
    Set 神隠し使用者 対象ユニットID
    // ↓で対象者を習得。
    ForEach 全 出撃
    // とりあえず味方の場合は除外。
    // 条件を変更したい場合は↓を変更して下さい。
    If (Party(対象ユニットID) <> 味方) Then
    Set 神隠し対象者[対象ユニットID] 1
    EndIf
    // 操作できないように設定する。↓は必須。
    SetStatus 対象ユニットID 非操作 -1
    Next
    // ↓で対象者がいる場合といない場合の分岐。
    If (Count(神隠し対象者) = 0) Then
    // 使用者が存在しない場合の処理。
    Call 神隠し終了処理
    Else
    // 使用者が存在する場合の処理。
    EndIf
    Exit

    // ユニットコマンドで使用の確認。
    ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
    Confirm 神隠しを発動しますか?
    If (選択 = 1) Then
    // 確認が不要なら↓二行だけ残して使用して下さい。
    Move 対象ユニットID X(神隠し使用者) Y(神隠し使用者)
    Call 神隠し終了処理
    Else
    Cancel
    EndIf
    Exit

    // 神隠し使用中、ユニットの存在しない箇所で右クリックすれば神隠しをキャンセル。
    マップコマンド 神隠しキャンセル (神隠し終了処理() = 1):
    Exit

    神隠し終了処理:
    UnSet 神隠しフラグ
    UnSet 神隠し使用者
    UnSet 神隠し対象者
    ForEach 全 出撃
    ClearStatus 対象ユニットID 非操作
    Next
    Return 0
引用返信/返信 削除キー/
■22882 / inTopicNo.7)  任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
□投稿者/ Shun -(2016/03/04(Fri) 18:28:17) [ID:nE4DXYig]
    以下のような、任意の味方ユニットを自身の隣接マスまで引き寄せるアビリティを作ろうと考えてます。

    神隠し, 解説=任意の味方ユニットを隣接マスまで引き寄せる。 再行動, 0, 2, -, -, -

    これだけだと何も起きないので、アビリティ使用後のイベントラベルを用いて、
    そのラベル内で自分以外の味方を選択し(イメージとしては精神コマンドの応援や祝福を使った時にキャラを選ぶ感じ)、
    選んだキャラをアビリティ使用者がいる位置に移動させる形で隣接させる感じで再現しようと思っています。なお、戦艦に搭載されているキャラは選択の対象外としています。
    イメージとしては以下のような感じです。


    使用後 キャラクターA 神隠し:
    Talk システム
    キャラクターAは神隠しを使った。;ターゲットを選んでください。
    End

    #(インクルードを用いてターゲットを選ぶ)

    Move ターゲット X(キャラクターA) Y(キャラクターA)

    Exit


    自分のやりたい方法としては、応援や祝福の精神コマンドを使った時のように
    マップ上の味方ユニットに矢印を動かしてクリックする形のインクルを用いて、
    その対象をMoveコマンドで移動させる形で神隠し使用者に隣接させたいのですが、
    ターゲットを選ぶインクルの組み方が分からないので、それが分かる方がいれば教えていただきたいと思います。
    あるいは、上記以外の別の手段で神隠しの再現ができそうならば、その方法も教えて欲しいです。
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>
Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -