製作状況
昨日から今日でここまで完成。明日にも残っている二つの技を入れて、必殺技の作業を終了させる予定です。
力の行使(操作)・連撃及び爆発は、以前掲示板でも話題になった「画面外に出ることはできるが、ステージ外に出ることはできない」という性質を持っています*1。前まで放置していましたが、今回一念発起してこれを実装してみました。やや力技に頼った部分はありますが、原作に近い挙動にすることができました。実際に使用した処理を下に記しておきます。
「ステージ外に出たくない」ヘルパー側の記述(今回の場合はちびまい)
※不要な記述は省いています
;---------------------------------------------------------------------- ; 236 + Z [Statedef 22300] type = A movetype = A physics = N [State 22300, VelMul] type = VelMul trigger1 = AnimElemTime(2) >= 0 trigger1 = AnimElemTime(4) < 0 trigger1 = Vel X > 0 x = 0.9 [State 22300, VelSet] type = VelSet trigger1 = AnimElemTime(4) = 0 x = 0.5 [State 22300, VelSet] type = VelSet trigger1 = Time > 0 trigger1 = NumHelper(30302) = 0 x = 0 ignorehitpause = 1 ;Helper(30302)が画面端認識用。これが消失した時点でVelSetしてその場に留める ;HitDefのcornerpush系はすべて0にしておくこと ;今回はVelSetだが、「力の行使・爆発」の場合はPosSetで対処したほうが良い。その辺りは臨機応変に ;PosSetする場合、必ずfacingを使うこと [State 22300, Helper] type = Helper trigger1 = Time = 0 helpertype = normal name = "StageEdge_Detector" postype = p1 pos = 0,0 ownpal = 1 pausemovetime = 9999 supermovetime = 9999 stateno = 30300 ID = 30302 ignorehitpause = 1 ;画面端認識用Helperを最初に呼んでおく ;ステート番号ごとにユニークなIDを割り振る必要があるので注意 ;これ以下は通常の処理なので省略
画面端認識用ヘルパーの記述
;---------------------------------------------------------------------- ; StageEdge Detector [Statedef 30300] type = A movetype = I physics = N anim = 99990 ctrl = 0 velset = 0,0 [State 30300, BindToParent] type = BindToParent trigger1 = 1 time = 1 pos = 0,0 ignorehitpause = 1 [State 30300, Projectile] type = Projectile trigger1 = Time % 5 = 0 projID = 30300 projanim = 99991 offset = 50,0 velocity = ifelse(Parent,Vel X > 0,Parent,Vel X, 1),Parent,Vel Y projstagebound = 0 projedgebound = 999999 projremovetime = 5 ignorehitpause = 1 ;offsetを少し前に設定し、できるだけ親に追従させる設定にする ;Velocityが0の場合projstageboundの条件を満たしても消失しないようなので、親の速度を見てProjectileのVelocityを設定 ;2008/08/31 07:11 更新 ;以前のものは不具合があったので差し替え [State 30300, DestroySelf] type = DestroySelf trigger1 = Time > 1 trigger1 = Root,NumProjID(30300) = 0 ;NumProjID(ProjID)はRootしか認識できないので、必ずリダイレクト ;飛び道具が消えた瞬間に本体を消去し、親にステージ端へ到達したことを伝える [State 30300, DestroySelf] type = DestroySelf trigger1 = isHelper(30301) trigger1 = Parent,StateNo != 21320 ;画面端に到達しなかった場合、親のStateNoを見て適切なタイミングで消す ;予めユニークなIDを割り振っておけば、isHelperを使って容易に対応できる [State 30300, DestroySelf] type = DestroySelf trigger1 = isHelper(30302) trigger1 = Parent,StateNo != 22300
*1:竜巻は普通にステージ外にも出られる