HTTPS SSH

mcc - MUGEN CNS Compiler - Author:chikuchikugonzalez (chikuchikugonzalez@gmail.com) Author's Site:[http://d.hatena.ne.jp/chikuchikugonzalez/]

解説

これなに?

MUGEN CNS用のプリプロセッサ型テンプレート展開プログラムです。 コンパイラとか言ってますが、別にコンパイルするわけではないです。

前もなかった?

mcpp - MUGEN CNS Pre-Processor - は文法をCプリプロセッサと同じにしようとした結果、死にました(´・ω・`)

使用方法

usage: mcc [-h] [-E ENCODING] [-V] [-S SPEC] [-D MACRO] [-L PATH] [-I PATH]
           [--environ] [--no-environ] [-v] [-vv] [--dump]
           [SOURCE] [DEST]

positional arguments:
  SOURCE                処理対象ファイル (省略時:標準入力)
  DEST                  出力先 (省略時:標準出力)

optional arguments:
  -h, --help            show this help message and exit
  -E ENCODING, --encoding ENCODING
                        入力ファイルの文字コードを指定します
  -V, --version         バージョン番号を出力します
  -S SPEC, --spec SPEC  対象とするMUGENバージョンを指定します
  -D MACRO, --define MACRO
                        定数マクロを定義します (複数可)
  -L PATH, --load-path PATH
                        Pythonライブラリファイルの検索パスを追加します (複数可)
  -I PATH, --include-path PATH
                        定義ファイルの検索パスを追加します (複数可)
  --environ             環境変数をマクロとして登録します
  --no-environ          環境変数をマクロとして登録しません

debug options:
  -v, --verbose         冗長メッセージを表示します
  -vv, --very-verbose   より冗長なメッセージも表示します
  --dump                初期マクロ定義を出力します。実際の処理は行われません

文法

プリプロセッサディレクティブ

先頭を「#」ではじめるとプリプロセッサディレクティブとして認識されます (「#」の前に空白があっても良い)

プリプロセッサディレクティブ内におけるコンパイラアクセス

ディレクティブ内の各プリプロセッサ命令中では以下の関数によって限定的なマクロコンパイラへの問い合わせができます。 各命令のパラメータは最低限有効なPythonコードでなければなりません。

defined('MACRONAME')

  • _MACRONAME_というマクロが定義されているかを判定します。
  • 定義されている場合はTrue、未定義の場合はFalseです。
  • if defined('__FILE__')ifdef __FILE__ と等価です

macros

  • 定義済みマクロのディクショナリオブジェクトです。
  • 読み込みのみで変更はできません

プリプロセッサ命令

  • @{MACRONAME}_又は@{MACRONAME:arg1:arg2...}_として使用します
  • _@{~}_がマクロ展開部です

defmacro MACRONAME [MACROCODE]

  • _MACRONAME_という名前で定数マクロ (単純文字列置き換え型マクロ) を定義します
  • _MACROCODE_が置き換える値です。無指定の場合は空文字列となります

definline MACRONAME[:arg...] MACROCODE

  • _MACRONAME_という名前で関数マクロを定義します
  • :arg_が引数となり、:_で区切って指定します。
  • MACROCODE_内の:arg_が置き換えられます

if EXPRESSION

else

endif

  • EXPRESSION_がTrueの場合に_ifelse_までの内容を取り込みます。その場合は_else~_endif_は無視されます。
  • 逆に_EXPRESSION_がFalseの場合には_else_~_endif_が有効になります
  • _EXPRESSION_はPython式です

ifdef MACRONAME

  • if defined('MACRONAME') と同じです

ifndef MACRONAME

  • if not defined('MACRONAME') と同じです

for START to END [step STEP]

endfor

  • START_から始めて_STEP_ずつ足しながら_END_に到達するまで_for~_endfor_内のコードを繰り返し実行します
  • _STEP_は省略可能で、省略時は1になります
  • ネスト可能です
  • ループ中に限り次のマクロが定義されます
  • LOOP_NEST_LEVEL
    • ループのネスト回数です。外側のループの場合は_1_になります。
  • LOOP_COUNT_LV<NESTLEVEL>
    • ネストレベルに応じたループ回数です。
  • LOOPCOUNT
    • 現在実行しているループのループ回数です (最も深いループの回数)

EXPRESSION

  • バッククォートでくくった部分はPythonコードが直接実行されます。コードの実行結果に置き換えられます。
  • exec関数を利用した実装のため、importなどのPythonの言語構造になるものは利用できない可能性があります。

@(EXPRESSION)

  • バッククォートによるPythonコード実行ではネスト出来ないため、その代替記述です。
  • @(_から)_までがPythonコードとして認識されます。
  • ネストした場合は内側から評価されます。

定義済みマクロ

FILE

  • 処理中のファイル名です

LINE

  • 処理中ファイルの行番号です

SPEC

  • MUGENのプラットフォーム名です

標準定義マクロ

  • include/common.mcchで定義してあるマクロです

__MCC_COMMON

  • インクルードガードのようなものです

PERCENTAGE:value:ratio

  • :value:ratio パーセント (100分率) 表現に置き換えます

PERMIL:value:ratio

  • :value:ratio パーミル (千分率) 表現に置き換えます

" (例) getpower = Ceil(@{PERCENTAGE:PowerMax:1.6}), Ceil(@{PERMIL:PowerMax:1.6})

getpower = Ceil(PowerMax * 0.01 * 1.6), Ceil(PowerMax * 0.001 * 1.6)

となります "

MUGEN_VERSION

  • MUGEN本体のバージョン番号です
  • 1.0系は数値、それ以前は日付表現になります

GAME_WIDTH

GAME_HEIGHT

  • ゲーム画面の描画空間サイズです
  • 1.0系は各キャラのLocalcoordを反映するために_GameWidth_トリガー及び_GameHeight_トリガーに展開されます
  • それ以前は320, 240に固定です

CONST720:value

CONST480:value

CONST240:value

  • 1.0系の場合はそれぞれ_Const720p(:value), _Const480p(:value), _Const240p(:value)_トリガーへと展開されます
  • 1.0以前の場合はそれぞれ (:value * 0.25), (:value * 0.50), (:value * 1.00) へと展開されます

COND:expr:left:right

  • 1.0系の短絡評価トリガーであるcondへと展開されます
  • 1.0以前はifelseへと展開されます

REMAP_PALETTE

  • RemapPalステートコントローラ名です
  • 1.0以前はNullステートコントローラへ置換されます

VICTORY_QUOTE

  • VictoryQuoteステートコントローラ名となります
  • 1.0以前はNullステートコントローラへ置換されます

VOLUMESCALE:value

VOLUME:value

  • PlaySnd等で使われる音量調整パラメータ値補正用マクロです
  • 1.0の場合はどちらも_volumescale = :value_ へ展開されます
  • 1.0以前の場合はどちらも volume = :value へ展開されます
  • ただし、1.0で_VOLUME_マクロ、又は1.0以前で_VOLUMESCALE_マクロを使った場合は、値の補正が行われます
  • _VOLUMESCALE_は0~100へ補正されます
  • _VOLUME_は-255~255へ補正されます