製作状況

まい召喚 連撃
爆発 竜巻

昨日から今日でここまで完成。明日にも残っている二つの技を入れて、必殺技の作業を終了させる予定です。

力の行使(操作)・連撃及び爆発は、以前掲示板でも話題になった「画面外に出ることはできるが、ステージ外に出ることはできない」という性質を持っています*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:竜巻は普通にステージ外にも出られる