その他




データ型

ムゲンで使用されるデータ型には、Int、Float、Boolean、Char、Stringがあります(他にもあったかも)。
Int :整数型。10、-100など。-2,000,000,000〜2,000,000,000(-20億〜20億)位まで指定可能らしいです。
Float :浮動小数型。-1.23、1.414など。7文字位までは正確に扱われるそうです。
Boolean :真(0以外)か偽(0)のいずれか。基本的にはInt。
Chr :文字。S、C、Aなど。
String :文字列。"fire_ball"など。

データ型はトリガーやステートコントローラのパラメータ毎によって異なり、誤った指定をすると、エラーとなります。
ただ、FloatIntの値を指定するのはかまいません。それぞれ値が含まれてますので。
StrChrを含んでいますが、Str""で括る必要があります。


演算子

ムゲンでは、おなじみの+、-などのほか、様々な演算子が用意されています。

≪おなじみの演算子≫
+ :足し算。1+2=3
- :引き算。3-2=1
* :かけ算。2*3=6
/ :割り算。6/3=2

≪独自の演算子≫
% :剰余。割り算の余りです。6%3=0、7%2=1。
** :べき指数。2**10=1024。数学的には第2オペランドに小数を指定できる(例:256**0.5=16)のですが、MUGENではサポートされておらず、第1、第2オペランドともに整数のみ指定可能。よって平方根はおろか小数のべき乗すら計算することはできません。logは用意されてるのに・・・・何で?

ちなみに
例えば0.6**2=0.36となるはずですが、正しい値は返されません。
0.6=6/10なので、6**2/10**2で0.6**2になるのでは?と思う方もいらっしゃるかもしれませんが、やはり正しい値は返されません。


≪理論演算子≫〜条件が合えば(真なら)1、それ以外なら(偽なら)0になります。
! :NOT条件を意味します。!10で10以外ということです。演算子というよりは符号に近いといえます。
&& :AND条件を意味します。左辺と右辺が共に真のとき1、それ以外なら0です。1&&1=1。1&&0=0。
|| :OR条件を意味します。左辺と右辺が共に偽のとき0、それ以外なら1です。1||0=1。0||0=0。
^^ :XOR条件を意味します。左辺と右辺のどちらかのみが真のとき1、それ以外なら0です。1^^0=1。1^^1=0。
~、&、|、^ :ビット単位のNOT、AND、OR、XORです。1つの変数を複数のフラグ(ON/OFFのみ)として使用する場合に使います。
~は全フラグの反転、&は特定フラグの判定、|はフラグのON、^は特定フラグの反転に使用できます。

≪等号、不等号≫
= :等号。イコール。
!= :ノットイコール。等しくない。
:= :変数に値を代入することができます。たぶん。varsetと同時にそのvarを参照する場合、こちらを使ったほうが簡潔に処理できます。たぶん。
> :大なり。
< :小なり。
>= :以上。=>と書くとエラー。
<= :以下。=<はエラー。

≪値の範囲≫演算子ではありませんが・・・
( ) :(100,1000)で100より大きく、1000未満
[ ] :[50,200]で50以上200以下。
組み合わせて使用可能。
[0,300)・・・・0以上300未満。

演算子の優先順位は以下のとおり

高い
! ~ - ・・・演算子というよりは符号。
**
* / %
+ -
> >= < <=
= !=
:=
&
^
|
&&
^^
||
低い


トリガー

トリガーはコンディショントリガーとファンクショントリガーに大別できます。

------------------------------------------------
[State 1234, 5]
type = VarSet
trigger1 = time = 5
v = 0
value = time + 5

------------------------------------------------
上の例では、trigger1 = time = 5のtimeはコンディショントリガー、value = time + 5のtimeはファンクショントリガーです。

まあ、要するに、trigger* = の後に書けばコンディション、それ以外はファンクションです。
ぶっちゃけ、どうでもいいことですが。


トリガーのリダイレクト

トリガーが返すのは、基本的に全て自分(プレイヤー)に関する値ですが、リダイレクトキーワードを指定することにより、自分以外のプレイヤーのトリガーを参照可能です。
リダイレクトキーワードには、以下の種類があります。

parent :
root :ルート
helper(ID) :ヘルパー。(ID)を省略した場合は最初に見つかったヘルパー。
target(ID) :ターゲット。(ID)を省略した場合は最初に見つかったターゲット。
partner :パートナー。
enemy(n) :n番目に見つかった敵(nは0から数えます)。(n)を省略した場合は最初に見つかった敵。
enemyNear(n) :n番目に近い敵(nは0から数えます)。(n)を省略した場合は最も近い敵。
playerID(ID) :プレイヤーをIDで指定。

これらの文字列の後にカンマ","とトリガーを記述すれば、それぞれの対象の値を参照できます。
「最初に見つかった」という記述は、英語のdocを直訳したもので、最小IDの対象だとは思いますが、正確に何を意味するのかは、把握しておりません。
ちなみに、helper、target、playerIDは、いずれもIDを引数にとりますが、それぞれIDの意味合いが異なり、helperの場合はhelperID、targetはhitID、playerIDはplayerIDを意味します。
それゆえ、helperとtargetは、ID指定しても、複数のプレイヤーが対象になる場合があり、そのいずれか一体を指定することはできません。

(例)
type = VarSet
trigger1 = time = 0
v = 1
value = enemynear(1),ID ← 2番目に近い敵のIDをvar(1)に代入

type = TargetState
trigger1 = time = 0
trigger1 = target,stateno = 5000
value = 15000
↑ターゲットのステート番号が5000なら、15000に変更、といいたいところですが、ターゲットが複数の場合、うまく機能しません。
例えば、一方がガード、一方がヒットだった場合、target,statenoは、一方の状態しか返しません。
ガードの方の状態を返した場合、どちらも何も起こりませんが、ヒットの方を返した場合、どちらもステート15000に変更されます。

ゲームに支障はない場合が多いですが、いずれも対象のhelpr、targetなどがいないとエラーとなります。コンディショントリガーとして使用してもエラーが出てしまうので、確実に対象がいる場合にのみ使用した方がよいです。
特にtarget(攻撃を当て、ヒット状態にした相手)は、すぐにいなくなるので、取扱注意です。
NumTargetなどと併用しましょう。

以下のトリガーは旧式であり、ファンクショントリガーとしては使用できません。

AnimElem(AnimElemTimeを使用すれば問題なし)
P1Name, P2Name, P3Name, P4Name
StateType, P2StateType
Command
MoveType, P2MoveType
TimeMod
(%演算子を使用すれば問題なし)
ProjHit, ProjContact, ProjGuarded(それぞれProjHitTime, ProjContactTime, ProjGuardedTimeを使用すれば問題なし)

そして、ファンクション的コンディショントリガーの記述方法もありますので、ちょっと紹介。

common1.cnsには、以下のような記述があります。

------------------------------------------------
[State 120, 5]
type = ChangeState
trigger1 = AnimTime = 0
value = 130 + (statetype = C) + (statetype = A)*2

------------------------------------------------

statetypeは、右辺の文字(S or C or A)を判定し、真(1)か偽(0)を返すトリガーです。
つまり、上の例では、
statetype = Cのとき 130+1+0*2=131
statetype = Aのとき 130+0+1*2=132
どちらでもないとき  130+0+0*2=130 を返します。

んで、通常の条件式(例:time=0など)も、真のとき1、偽のとき0を返します。
よって、10 + (time = 0)などと書けば、time=0のとき11を、それ以外のとき10を返します。
すなわち、完全ではありませんが、IfElseの代用となります。

IfElseはネスト回数に上限があるようですが、この方法なら気にする必要もありません。
かなり便利な記述方法なので、覚えておいて損はないです。


エフェクト

ヒットマーク、ガードマークなどは最初から準備されています。
標準添付のものが貧弱すぎるので、自分のスプライトを参照する方が大半ですが、できのよいADD-ONが公開されているので、エフェクトを統一するためにも共通エフェクトを使用してみましょう。その方がラクです。
ADD-ONを使用していない場合、ヒットマークが出なかったりしますが、ご愛嬌。

0 - 弱ヒットマーク
1 - 中ヒットマーク
2 - 強ヒットマーク
3 - 必殺ヒットマーク
10 - 弱出血
11 - 中出血
12 - 強出血
40 - 弱ガードマーク
41 - 中ガードマーク(標準添付されてません)
42 - 強ガードマーク(標準添付されてません)
60 - 弱地面衝撃
61 - 中地面衝撃
62 - 強地面衝撃
70 - 弱壁衝撃
71 - 中壁衝撃
72 - 強壁衝撃
100 - lv1 超必殺技演出
101 - lv2 超必殺技演出
102 - lv3 超必殺技演出
120 - 埃
130 - パワーアップ演出


≪もどる≫