読者です 読者をやめる 読者になる 読者になる

chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

シェリス様0.1.3 & クリスマ萃香に挑戦しました

えー、クリスマスですね。
自宅でケーキ食べてました。

それはそうと前回の予定通りシェリス様作成動画を投稿しました。が、進捗はほぼないです。スマヌ。
代わりといってはなんですが、おまけが2個あります。良かったら見ておくれ
D
最後のパレットはくるみのやつ + 全サポート分です。大きいのはTwitpicにあります。
256色に収まったのはいいんだが、なにこれ on Twitpic
↑の画像をクリックでTwitpicに飛びます。隙間がねぇ。

クリスマ萃香に挑んでみたんですよ

いや、なんかTwitter上でちょろっと話題になったのでGルガールで挑んでみたんだ。
D
ゴッドプレスループでダメージ稼がないと俺の腕ではAI Level 11は無理でした(´・ω・`)

その他

今作ってるものとかを挙げると、

  • 【Program】アクションゲームエンジン
    • 某氏の企画用。来年公表できたらいいなぁ
  • 【MUGEN】魔が堕ちる夜 ザーバッハチルドレンNo.7 ブラックアート・シェリスエルネス=ザーバッハ
  • 【MUGEN】アルカナハート3 シャルラッハロート (必須埋まってない)
  • 【MUGEN】白レン (方針がダミアンアーミー従えたヴァンプリ仕様になりました)
  • 【MUGEN】箱レン (スプライトってかパレット整理中)
  • 【MUGEN】ヴァンガード・プリンセス くるみ (パレット整理完了・SFF未着手)
  • 【Program】MUGEN用ツール類
    • mcpp -MUGEN CNS Pre-Processor- (完成)
    • mcdoc -MUGEN CNS Documenter- (企画段階)
    • sffup / sffdown / sffextract / sffarchiver (全部企画段階)
  • その他バグ対応
    • スマヌ(´・ω・`)。まだ対応しきれんのよ
      • てか今公開してるキャラ全部にちょっとしたバグがが

…こんなもんか?
来年はとりあえずゲームエンジン完成させないとならんので、シェリス様とかの完成がさらに遠のきますなぁ…
キャラとしては箱レン優先かなぁ…

では、良いお年を *1

シャルラッハロートの結鎖ケテンの処理方法について

単に先端と鎖の画像を0°〜179°回転した画像を登録して、360°回転済みAIRを用意しただけです。
それを開始点<=>終点間にループで配置しただけです。*2
角度計算とかはatan関数でできるので、座標系をMUGENに合わせて*3表示する画像を選択するだけですね。

;==============================================================================;
; 要鎖シュリンゲ
;==============================================================================;
[Statedef 1000]
type     = S
movetype = I
physics  = S
anim     = 1000
ctrl     = 0
facep2   = 1

;-------[ Vars ]-------;

[State 1000:            Var, 1]
type     = VarSet
trigger1 = Time = 0
v        = 40
value    = (var(40) + 1) % 3

;-------[ Mines ]-------;

[State 1000:            Mine]
type       = Helper
trigger1   = AnimElem = 4
helpertype = Normal
name       = "Mine"
stateno    = 15000
id         = 15000
postype    = p1
pos        = Floor(Const480p(320)), Floor(Const480p(-160))
ownpal     = 1

;-------[ States ]-------;

[State 1000:            Standing]
type     = ChangeState
trigger1 = AnimTime = 0
value    = 0
ctrl     = 1

[Statedef 1001]
type     = S
movetype = I
physics  = S
anim     = 1000
ctrl     = 0
facep2   = 1

;-------[ Vars ]-------;

[State 1000:            Var, 1]
type     = VarSet
trigger1 = Time = 0
v        = 40
value    = (var(40) + 1) % 3

;-------[ Mines ]-------;

[State 1000:            Mine]
type       = Helper
trigger1   = AnimElem = 4
helpertype = Normal
name       = "Mine"
stateno    = 15000
id         = 15000
postype    = p1
pos        = Floor(Const480p(320)), Floor(Const480p(-240))
ownpal     = 1

;-------[ States ]-------;

[State 1000:            Standing]
type     = ChangeState
trigger1 = AnimTime = 0
value    = 0
ctrl     = 1

[Statedef 1002]
type     = S
movetype = I
physics  = S
anim     = 1000
ctrl     = 0
facep2   = 1

;-------[ Vars ]-------;

[State 1000:            Var, 1]
type     = VarSet
trigger1 = Time = 0
v        = 40
value    = (var(40) + 1) % 3

;-------[ Mines ]-------;

[State 1000:            Mine]
type       = Helper
trigger1   = AnimElem = 4
helpertype = Normal
name       = "Mine"
stateno    = 15000
id         = 15000
postype    = p1
pos        = Floor(Const480p(320)), Floor(Const480p(-320))
ownpal     = 1

;-------[ States ]-------;

[State 1000:            Standing]
type     = ChangeState
trigger1 = AnimTime = 0
value    = 0
ctrl     = 1


;==============================================================================;
; 結鎖ケテン
;==============================================================================;
[Statedef 1100]
type     = S
movetype = I
physics  = S
anim     = 1100
ctrl     = 0
facep2   = 1

;-------[ Chain ]-------;

[State 1100:            Chain]
type        = Helper
trigger1    = AnimElem = 5
helpertype  = Normal
name        = "Chain"
stateno     = 10000
id          = 10000
postype     = p1
pos         = 0, 0
ownpal      = 0
sprpriority = 2

;-------[ States ]-------;

[State 1100:            Stop]
type     = ChangeState
trigger1 = Time >= 120
value    = 1101
ctrl     = 0

[Statedef 1101]
type     = S
movetype = I
physics  = S
anim     = 1101
ctrl     = 0

;-------[ States ]-------;

[State 1101:            Standing]
type     = ChangeState
trigger1 = AnimTime = 0
value    = 0
ctrl     = 1


;==============================================================================;
;                                 [ ヘルパー ]                                 ;
;==============================================================================;
;==============================================================================;
; 鎖
;==============================================================================;
[Statedef 10000]
type     = A
movetype = I
physics  = N
anim     = 9999

;-------[ Slot ]-------;

[State 10000:           Slot, 1]
type       = VarSet
triggerall = Time = 0
trigger1   = Root,NumHelper(15000) = 1
v          = 40
value      = 41 + Root,var(40)

[State 10000:           Slot, 2]
type       = VarSet
triggerall = Time = 0
trigger1   = Root,NumHelper(15000) = 2
v          = 40
value      = 41 + (Root,var(40) + 2) % 3

[State 10000:           Slot, 3]
type       = VarSet
triggerall = Time = 0
trigger1   = Root,NumHelper(15000) = 3
v          = 40
value      = 41 + (Root,var(40) + 1) % 3

[State 10000:           Safety]
type       = DestroySelf
triggerall = Time = 0
trigger1   = Root,NumHelper(15000) != [1, 3]
trigger2   = !PlayerIDExist(Root,var(var(40)))

;-------[ Angles ]-------;

[State 10000:           Pos, 1, X]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDEXist(Root,var(var(40)))
fv       = 0
value    = Pos X

[State 10000:           Pos, 1, Y]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDEXist(Root,var(var(40)))
fv       = 1
value    = Pos Y

[State 10000:           Pos, 2, X]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDEXist(Root,var(var(40)))
fv       = 5
value    = PlayerID(Root,var(var(40))),Pos X

[State 10000:           Pos, 2, Y]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDEXist(Root,var(var(40)))
fv       = 6
value    = PlayerID(Root,var(var(40))),Pos Y

[State 10000:           Distance, X]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
fv       = 10
value    = fvar(5) - fvar(0)

[State 10000:           Distance, Y]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
fv       = 11
value    = fvar(6) - fvar(1)

[State 10000:           Angle]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
trigger1 = fvar(10) != 0
fv       = 2
value    = -1 * Atan(fvar(11) / fvar(10))

[State 10000:           Angle, 2]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
trigger1 = fvar(10) = 0
fv       = 2
value    = ifelse(fvar(11) > 0, 90, 270)

[State 10000:           Time]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
v        = 0
value    = 0

[State 10000:           Vel]
type     = VarSet
trigger1 = Time = 0
trigger1 = PlayerIDExist(Root,var(var(40)))
fv       = 3
value    = 16

[State 10000:           Goto]
type     = ChangeState
trigger1 = Time = 0
value    = 10001

[Statedef 10001]
type     = U
movetype = U
physics  = U
ctrl     = 0

;-------[ Variables ]-------;

[State 10001:           Time Update]
type     = VarAdd
trigger1 = Time = 0
v        = 0
value    = 1

[State 10001:           Pos Update]
type     = VarSet
trigger1 = Time = 0
fv       = 20
value    = fvar(3) * cos(fvar(2)) * var(0)

[State 10001:           Pos Update, 2]
type     = VarSet
trigger1 = Time = 0
fv       = 21
value    = -1 * Facing * fvar(3) * sin(fvar(2)) * var(0)

;-------[ States ]-------;

[State 10001:           Goto Wait]
type       = ChangeState
triggerall = Time = 0
trigger1   = ifelse(Facing > 0, fvar(20) >= fvar(10), fvar(20) <= fvar(10))
trigger2   = fvar(21) <= fvar(11)
value      = 10005

[State 10001:           Goto View]
type     = ChangeState
trigger1 = Time = 1
value    = 10002

; draw head
[Statedef 10002]
type     = U
movetype = U
physics  = U
ctrl     = 0

[State 10002:           Remove]
type     = RemoveExplod
trigger1 = Time = 0
id       = 10000

[State 1002:            Remove Chain]
type     = RemoveExplod
trigger1 = Time = 0
id       = 12000

;-------[ Head ]-------;

[State 10002:           Head]
type       = Explod
trigger1   = Time = 0
id         = 10000
anim       = 10000 + Floor(Facing * fvar(2) * 180.0 / PI)
postype    = p1
pos        = Floor(fvar(20)), Floor(fvar(21))
ownpal     = 0
removetime = -1

;-------[ Chains ]-------;

[State 10002:           Chain]
type     = ChangeState
trigger1 = Time = 0
value    = 10003

[Statedef 10003]
type     = U
movetype = U
physics  = U
ctrl     = 0

;-------[ Vars ]-------;

[State 10003:           Update Pos]
type     = VarAdd
trigger1 = Time = 0
fv       = 20
value    = (0 - 30 * cos(fvar(2)))

[State 10003:           Update Pos, 2]
type     = VarAdd
trigger1 = Time = 0
fv       = 21
value    = Facing * 30 * sin(fvar(2))

;------[ Chain ]------;

[State 10003:           chain]
type       = Explod
trigger1   = Time = 0
id         = 12000
anim       = 12000 + Floor(Facing * fvar(2) * 180.0 / PI)
postype    = p1
pos        = Floor(fvar(20)), Floor(fvar(21))
ownpal     = 0
removetime = -1

;------[ State ]-------;

[State 10003:           Loop]
type       = ChangeState
triggerall = Time = 0
trigger1   = fvar(20) > 0
trigger1   = fvar(21) < 0
value      = 10003

[State 10003:           Return]
type       = ChangeState
triggerall = Time = 0
trigger1   = fvar(20) <= 0
trigger2   = fvar(21) >= 0
value      = 10001

[Statedef 10005]
type     = U
movetype = U
physics  = U
ctrl     = 0

;-------[ Null ]-------;

[State 10005:           null]
type     = Null
trigger1 = 0


;==============================================================================;
; 設置
;==============================================================================;
[Statedef 15000]
type     = A
movetype = I
physics  = N
anim     = 15000
ctrl     = 0

;-------[ Slots ]-------;

[State 15000:           Var, 1, Slot]
type     = VarSet
trigger1 = Time = 0
v        = 40
value    = 41 + Root,var(40)

[State 15000:           Var, 2]
type     = ParentVarSet
trigger1 = Time = 0
v        = var(40)
value    = ID

;-------[ Effects ]-------;

[State 15000:           Rotate]
type     = AngleDraw
trigger1 = 1
value    = Time % 360

;-------[ States ]-------;

[State 15000:           Destroy]
type     = DestroySelf
trigger1 = Root,var(var(40)) != ID

*1:まだ早い

*2:コメント含むコード行数450行くらいでできました

*3:数学的には左回りだけど画像処理的に右回り。たぶんWindowsの座標系の制限