C言語にはプリプロセッサというものがありまして。
マクロというもので色々定義しておくと、実装コードに書いたマクロが実コードに置き換えられるという単純なものです。
でもこれがあると条件変えるだけで実コードが変えられるのマルチプラットフォーム対応には結構便利だったり*1
MUGENでもあると便利だと思う。例えばGameWidthとかConst720pとかWin版には存在しないトリガーとかを定数に置き換えるのに使えるのではと。
なので作った。その名も『mcpp - MUGEN CNS Pre-Processor -』。
プロジェクトページは→chiku2gonzalez / mcpp — Bitbucket
DLはプロジェクトページ右方向の「get source」からzipを選べばいいんじゃなかろうか。
一応次のキャラ当たりから使う予定。
以下Readmeの抜粋
- -
mcpp - MUGEN CNS Pre-Processor -
Author : chikuchikugonzalez (chikuchikugonzalez@gmail.com)
- -
[使い方]
Usage: ruby mcpp.rb [options][文法]
<基本>
・「#」で始まる行がプリプロセス対象です
・コメントはMUGEN CNSと同じく「;」です<各命令>
- ファイルの取り込み
include <ファイル>
include "ファイル"
※1 上2つは同じ
※2 カレントディレクトリ -> mcppのあるディレクトリ -> -Iで追加されたディレクトリ
の順に探します
- マクロ定義
defmacro NAME [VALUE]
※1 NAMEという名前のマクロを定義します
※2 VALUEは省略可能です
※3 関数マクロは未実装です
- 関数形式マクロ (インラインマクロ)
definline NAME(ARG[, ARG...]) VALUE
※1 NAMEでマクロを定義します
※2 VALUEは必須です
※3 ARGは複数可(例)
#definline _IFELSE_(trgger, value1, value2) ifelse(trigger, value1, value2)が定義されているときに
[State]
type = Null
trigger1 = _IFELSE_(NumHelper(0), 1, 0)は
[State]
type = Null
trigger1 = ifelse(NumHelper(0), 1, 0)となります
- 分岐
if 条件
if !条件
if not 条件
if defined(マクロ名)
if !defined(マクロ名)
if not defined(マクロ名)
ifdef マクロ名
ifndef マクロ名
〜
[else
〜]
endif
※1 条件は
マクロ名 [比較演算子] 値
値 [比較演算子] マクロ名
値 [比較演算子] 値
値
などです
※2 ifdefはif defined、ifndefはif not definedに展開されます
※3 elseは省略可能です
※4 endifは省略不可能です (ない場合はファイルの終端がendifと同じ扱いになります)
- 繰り返し
for 識別子 in 開始値 to 終了値 [step 増分値]
※1 識別子はマクロとして定義されます
※2 インクリメントのみ対応しています。デクリメントは未実装です
※2 step省略時は1になります
:Rubyライブラリ読み込み
require
require "ruby-lib-name"
:Rubyコード実行 (埋め込みRubyコード)
chiku2gonzalez / mcpp — Bitbucket
(内部で) @{ 〜 }
※1 Rubyコードを実行します
※2 Rubyとしての結果で置き換えます。ただし、Falseとして評価される場合は空文字列になります
*1:charによる文字列とwchar_tによる文字列をTCHARマクロだけで表せる