「スロットID」の編集履歴(バックアップ)一覧に戻る

スロットID - (2014/01/22 (水) 18:51:55) のソース

----
*■スロットIDについて
そのフレーム中のHelperを含むキャラの処理の順番を決定する情報。
-正式名称不明。便宜上他のIDと区別するため「''スロットID''」と呼称。
--[[デバッグ]]表示の2段目、Name、IDの隣に()内に表示されている番号のこと。
-[[T-/ID]](キャラID)と同様、Helperを含む全てのキャラが保有する。
--キャラIDは「その試合中、''別のキャラが同じIDを使用することがない''」のに対し、&br()スロットIDは特定のスロットを除き、''空きが発生すれば使い回される''。
--キャラIDと異なり、''トリガー情報が存在しない''。
--キャラIDは試合形式によっては決まった数字にはならないため&br()''キャラIDを利用して順番を確かめることができる状況は限られる''。
---[[T-/TeamMode]]が互いにSingle(シングル)なら、キャラIDそのままで確認できる。
---TeamModeが互いにTurns(チーム戦)で[[RoundNo>T-/RoundNo]]>1の場合、キャラIDは一切信用できない。
---TeamModeがSimul(タッグ)の場合、パートナーとのキャラIDとはそのまま確認できる。はず。

:処理の順番の決定|
-1フレームにおけるステートの処理は基本的にスロットIDの若い方から優先的に行われる。
--1Pは0、2Pは1、3Pは2、4Pは3で固定されているため、優先順位は1P>2P>3P>4P。
--[[SC-/Helper]]については後述。
-ただしフレームの開始時点で[[MoveType=A>T-/Movetype]]であった場合さらに優先的に処理される。
--つまり「ステート開始時点で''Movetype=AのキャラのスロットIDの若い順''」の次に&br()「行動していない''Movetype!=Aの既存キャラのスロットIDの若い順''」で処理される。
--新しく射出された[[SC-/Helper]]は射出したフレームでは既存キャラ処理後、射出順で行われる。
-また[[SC-/Pause]]・[[SC-/SuperPause]]実行後のフレームではMoveTimeの無いキャラはスキップ。
--2キャラが同じフレームで実行した場合、両者ともMoveTime分のみ動ける。
--''ただし攻撃を受けた場合、HitPauseの時間分MoveTimeが加算され、動くことができる''。
---とは言え基本的に動くことは無いが

:HelperのスロットID|
-[[SC-/Helper]]に割り当てられるスロットIDは「''4以上で使用されていない最も若いスロットID''」
--[[SC-/DestroySelf]]で''消去された場合、そのスロットIDは空き''となる。
---既に出ているHelperのスロットIDは変化しない。既にあるHelperで空きを詰めるような処理は無い。
---もちろん新しく射出されたHelperがあれば、空いたスロットIDに入ることもある。
-具体例
--ABCD の4個のHelperを射出すると、このような優先順位で処理される。
--A''B''CD そこから''B''を消去すると
--A''×''CD このように''B''のスロットIDが空きとなる。そこへ新しく''E''のHelperを射出すると
--A''E''CD と空いたスロットIDへEが配置され、この優先順位で処理が行われる。
-なお''射出したフレーム時点で既存キャラより後に処理が行われる''。
--上記例の場合、射出フレーム時点「ACD…''E''」→次のフレームから「A''E''CD」ということ。
-''新規Helperの処理の順序は射出順''
--「ABC」とある状態でAがDを射出「ABC(D)」、Bが消失「A_C(D)」&br()CがEを射出「AECD」というスロット順になるが、
---射出時点では「ABC→DE」の順番で処理が行われる。
-[[SC-/DestroySelf]]実行の手前に[[SC-/Helper]]を置いて発射と同時に消失した場合
--''射出時点で空きにはなっていないため別のスロットIDを用いる''
--[[SC-/DestroySelf]]を先に実行して[[SC-/Helper]]を実行した場合は、エラーで落ちる。
-Helper,[[リダイレクト]]
--Helperリダイレクトで該当するHelperが複数存在する場合は&br()&b(){最もスロットIDの若いHelper}を参照する。
-なお、こうした仕様から''後に射出した方が処理が後になるわけではない''が、
--同じキャラから同時に複数射出したHelper同士のスロットIDの前後のみは保証できる。
---空いている若い順からなので、''同じキャラから同時に''あれば若い順に入ってくれる。

#region(''■スロットID処理の図解'')
|>|>|>|>|>|>|>|>|>|>|>|&font(20,b){■スロットID処理の図解}|
|>|>|>|>|>|>|>|>|>|>|>|↓|
|↓|>|>|>|>|>|>|>|>|>|>|&font(20,b){▼初期状態}|
|~スロットID|~0|~1|~2|~3|~4|~5|~6|~7|~8|~9|~10|
|~配置キャラ|~1P固定|~2P固定|~(3P固定)|~(4P固定)|空|空|空|空|空|空|空|
|>|↓|>|>|>|>|>|>|>|>|>|※3P,4P用の2,3はHelperでは使われない。|
|>|>|>|>|>|>|>|>|>|>|>|↓|
|↓|>|>|>|>|>|>|>|>|>|>|&font(20,b){▼適当に[[SC-/Helper]]を射出する。}|
|~スロットID|~0|~1|~2|~3|~4|~5|~6|~7|~8|~9|~10|
|~配置|1P|2P|(3P)|(4P)|~Helper1|~Helper2|~Helper3|~Helper4|~Helper5|~Helper6|空|
|>|↓|>|>|>|>|>|>|>|>|>|空いている所にHelperが次々並んでいく|
|>|>|>|>|>|>|>|>|>|>|>|↓|
|↓|>|>|>|>|>|>|>|>|>|>|&font(20,b){▼一部のHelperが[[SC-/DestroySelf]]で消滅する。}|
|~スロットID|~0|~1|~2|~3|~4|~5|~6|~7|~8|~9|~10|
|~配置|1P|2P|(3P)|(4P)|Helper1|~空|Helper3|~空|Helper5|Helper6|空|
|>|↓|>|>|>|>|>|>|>|>|>|消滅したところは空きとなる。''既存のHelperが繰り上がったりすることはない''。|
|>|>|>|>|>|>|>|>|>|>|>|↓|
|↓|>|>|>|>|>|>|>|>|>|>|&font(20,b){▼再度[[SC-/Helper]]を射出する}|
|~スロットID|~0|~1|~2|~3|~4|~5|~6|~7|~8|~9|~10|
|~配置|1P|2P|(3P)|(4P)|Helper1|~Helper7|Helper3|~Helper8|Helper5|Helper6|空|
|>|・|>|>|>|>|>|>|>|>|>|空いている若いスロットIDへ優先的に配置される。&br()射出フレームより後はこの順番を基準として処理を行うため、&br()''先に射出されていたHelper5,6よりもHelper7,8の方が優先される。''&br()勿論Movetypeによる補正は受ける|
|>|・|>|>|>|>|>|>|>|>|>|※なお射出フレーム時点では既存のキャラが終わった後、最後に処理をする。|
#endregion

----
*■Lv2-処理の順番を正しく認識するために
速度計算など、相手との処理の順番を正しく認識しなければならない状況はある。
その際、処理の順番を確実に確認するためには少々の手間が必要になる。
なおHelper同士の順番については自分のHlperにかぎらなければ不可能です。
(自分のHelper同士でも、ParentVarsetなどを駆使してできるかどうか、困難です。)

:確認の素案|
-[[T-/TeamSide]]で1P側か2P側かを確認する
-[[T-/NumPartner]]でタッグのパートナーがいるかどうかを確認する。
--パートナーがいる場合、( ID < Partner,ID )でどちらが1P/2P側かを確認する。
-まず自分側の状況を確認し、基本値を設定する。
--TeamSide = 1 でNumPartner=0、もしくは( ID < Partner,ID )=1なら、1P側と確定。基本値を10に。
--TeamSide = 1 でNumPartner=1かつ( ID < Partner,ID )=0なら、3P側と確定。基本値を12に。
--TeamSide = 2 でNumPartner=0、もしくは( ID < Partner,ID )=1なら、2P側と確定。基本値を11に。
--TeamSide = 2 でNumPartner=1かつ( ID < Partner,ID )=0なら、4P側と確定。基本値を13に。
--ステート開始時にMoveType=Aであった場合は、基本値を-5する。
-次に相手の状況を確認し、基本値を設定する。
--自分側がTeamSide = 2 で( EnemyNear,ID = Enemy,ID)=1なら近い敵は1P側と確定。敵基本値を10に。
--自分側がTeamSide = 2 で( EnemyNear,ID = Enemy,ID)=0なら近い敵は3P側と確定。敵基本値を12に。
--自分側がTeamSide = 1 で( EnemyNear,ID = Enemy,ID)=1なら近い敵は2P側と確定。敵基本値を11に。
--自分側がTeamSide = 1 で( EnemyNear,ID = Enemy,ID)=0なら近い敵は4P側と確定。敵基本値を13に。
--EnemyNear,Movetype=Aであった場合、敵基本値を-5する。
--※ただしこのままだと''Movetypeが変化したフレームでの認識が定まらないため''&br()Helperで相手の状態を記録させて、そこから認識させるのがベター
-確認して設定した数値を比べ( 基本 < 敵基本値 )=1である場合、&br()敵より自分の方が先に処理していると断定できる。
-自分基本値=10+(TeamSide=2)+ 2*(var(*相方確認*)=1) -5*(MoveType=A)
-相手基本値=10+(TeamSide=1)+ 2*!(EnemyNear,ID = Enemy,ID) -5*(Helper(xx),var(*敵Movetype確認*))
※Partner,リダイレクトを使用する際は必ず直前でNumPartner>0を調べること。
※2対2のタッグ時を限界として想定。改造MUGENなどでの4人タッグなどは不可。

----