```
mp.file.substr(0,4)=='hoge'
```
この記述は、JavaScript文としては正しいです。
mp.fileに格納されている文字列が「hoge」で始まる場合、上記の文はtrueを返します。
そこで、「うまく動作しない」理由ですが、
1. マクロの記述方法が正しくない
2. [if]タグの記述方法が正しくない
というのが考えられます。この両者は詳しい動作をHTMLの閉じタグの要領で囲んだ中で記述する必要があります。
例えば以下のような記述だと、メール質問者さんが記述したタグは機能します。
```
[macro name="sample_macro"]
[if o2_exp="mp.file.substr(0,4)=='hoge'"]
先頭にはhogeがつきます
[else]
先頭にはhogeがつきません
[endif]
[waitclick]
[endmacro]
;以下のタグは「先頭にはhogeがつきません」が表示されます
[sample_macro file="fugafuga"]
;以下のタグは「先頭にはhogeがつきます」が表示されます
[sample_macro file="hogefugafuga"]
```
また、O₂ EngineではUTF-8で原則動作しますので、もしかしたら文字コードの問題という可能性もございます。
いずれにせよスクリプトごと/プロジェクトごとをいただけると問題を発見しやすいので、問題なければご送付ください。