Go で書き直した Ikemen
Rev. | Time | Author | Message RSS |
dab9d1e7 | 2020-04-30 17:35:34 | neatunsou | ファイル入れ忘れ修正 |
11490ea6 | 2020-04-30 17:06:19 | neatunsou | スクリーンショットをフレームバッファから取得するようにし... |
163b119a | 2020-04-30 16:44:10 | neatunsou | K4thos氏の更新に対応 |
c7bd9fbc | 2020-01-15 01:50:37 | neatunsou | ishelperで-1を指定すると無指定と同じ挙動になっていたのを... |
0132d665 | 2020-01-15 01:44:06 | neatunsou | K4thos氏の更新に合流 変更点が多いので注意 |
deb8e826 | 2019-12-05 22:41:45 | neatunsou | fvar(38)が参照できないバグを修正 QuickLaunchでのキャラセ... |
0c2d7a0c | 2019-12-05 22:25:27 | neatunsou | Windblade氏の更新に対応 |
f57977b6 | 2019-11-05 21:22:49 | neatunsou | SFFv2.00のポートレイトを読み込めていなかったのを修正 cons... |
cdaa551a | 2019-11-05 21:19:43 | neatunsou | Windblade氏の更新に対応 |
d94f7e3f | 2019-10-26 21:11:56 | neatunsou | アーケードのステージ選択のミスを修正 Helperのownpalの処理... |
ZSSについて:
個別ページを参照 wiki:ZSS
Mapについて:
いわゆる連想配列。キャラクターごとに文字列と整数値を紐づけて設定することができる。 変数の代わりとして使える他、相手への参照ができるので 属性名を設定してタグとして使ったり、特定の技に対応するフラグとして使ったりすることができる。 なおマップ名に半角スペースは使えない。
例としてキャラクターdefファイルに以下のような記述を加えることでマップを設定できる。
[map] Ryu=1 Streetfighter=1 man=1 birthyear=1964 Japan=1 Ansatsuken=1
キーとなるマップの名前 (文字列)に=で整数値を設定する。このマップを持っていると、上から順に
・リュウ系統である ・ストリートファイターである ・男である ・誕生年が1964である ・日本出身である ・暗殺拳を使う
キャラであることを相手側から認識することができる。
このマップはトリガーで認識できる。
trigger1 = map(birthyear)
括弧内に認識したいマップ名を入れて使う。 例として上記のマップを設定したキャラではmap(birthyear)が1964として返ってくる。 何も設定していなければ0が返ってくる。
Mapの値を変更するステートコントローラ
[State test] type = mapset trigger1 = !time map = "birthyear" value = 1987
map = "キーとなるマップの名前" (文字列)
value = マップに入力する数値 (整数)
ステートコントローラでもマップを設定することができる。 既に設定した数値を変更したり、新たにマップを設定したりするのに使える。
追加ステートコントローラ:
・ Matchrestart
[state test] type = MatchRestart trigger1 = time=10 p1def = "kfm.def" p2def = "kfm.def" Stagedef = "stage0.def" reload=1,1
ラウンドをリセットして再開する。(デバッグキーのF4と同じ効果)
Reloadを1にするとファイルを読み込み直してラウンドを最初から再開する。(デバッグキーのShift + F4と同じ効果)
Reloadの1項目はP1、2項目はP2を読み込み直すかどうかを指定する。全て0の場合は読み込み直しを行わずラウンドをリセットする。
P1def 、P2def、Stagedefでdefファイルのパスを指定すると読み込み直しの際にそのファイルを読み込む。その際のパスは実行キャラを基準にする。
・ Mapset
上記を参照。
・ Savefile
[state test] type = SaveFile trigger1 = time=10 savedata=var path="kfm.gob"
指定したデータをまとめてバイナリとして保存する。 保存形式にはGo言語用のシリアライズフォーマットであるgobを使用する。
savedataで保存するデータをvar、fvar、mapのいずれかに指定する。 ステコンを実行したキャラもしくはヘルパーがその時点で持っている指定データの全てが保存される。
pathで保存先のファイルパスを指定する(実行キャラ基準)。 拡張子は自由だが、形式名のgobを推奨。
・ Loadfile
[state test] type = Loadfile trigger1 = time=10 savedata=var path="kfm.gob"
指定したデータを読み込んで実行キャラのデータに上書きする。 読み込む前のデータは全て消えるので注意。
savedataで読み込むデータをvar、fvar、mapのいずれかから指定する。 形式を間違えるとエラーになる。
pathで読み込むファイルのパスを指定する(実行キャラ基準)。
追加トリガー:
・ Majorversion
defファイルのmugenversionを1.0以上にしている場合に1を返す。
・ Map
上記を参照。
・ Selfstatenoexist
trigger1 = Selfstatenoexist(3000)
指定したナンバーのStatedefが存在すれば1を返す。しなければ0を返す。 括弧内に認識したいStatedefの番号を入れて使う。
・ Stagebackedge
自分の後方のステージ端までの距離を返す。
・ Stagefrontedge
自分の前方のステージ端までの距離を返す。
トリガーの変更点:
・ Teammode
チームモードでTagを選択時、このトリガーで"Tag"を指定すると1を返す
ステートコントローラの追加パラメータ:
・ Roundnotskip
Assertspecialのflagで指定するパラメータ。 実行中はボタン押しによるイントロと勝利ポーズのスキップができなくなる。
・ Teamside
Hitdefのパラメータ。 Hitdefを指定したTeamside(トリガーのTeamsideと同様)からの攻撃として処理する。
・ Extendsmap
Helperのパラメータ。 1にすると親のmapをHelperに引き継ぐ。
・ Projangle
Projectileのパラメータ。 Projectileのアニメーションを回転させる角度を指定する。
・ ReadplayerID
Selftateのパラメータ。 移動先を指定したPlayerIDのキャラが持つステートに変更する。 成功した場合、指定したPlayerIDのキャラにステートを奪取された状態になる。
・RedirectID
ステートコントローラ全般に使える。 ステコンの実行者を指定したPlayerIDのキャラに変更するオプションパラメータ。 ターゲットを取らずに対象に干渉することができる。 いわゆる永続ターゲットのような動作を簡単に実装可能。 相手に触れずにライフを減らす毒の再現などが主な使い道。
※以下のステコンでは実行フレームでしか効果を発揮しない処理の都合上動作しない
Posfreeze、Trans、Assertspecialの一部 (Screenbound、Playerpush、Angledraw、Offsetは対象IDより後に実行すれば効果が出る)
ステージdefの追加パラメータ:
・Attachedchar
ステージdefのInfoに書き込む。 指定したパスのキャラをステージ側のキャラとして登場させる。 Teamsideは3、攻撃は1P側2P側両方に当たり、両方から喰らう。 ステージdefだけでは実装できない機能をキャラによって実現できるようにするのが主な使い道。
・Autoresizeparallax
BGレイヤーのパラメータ。 ズームアウト時、IKEMENによるparallaxのサイズの自動修正を行うかどうかを指定する。省略時は1。 これを0にした上でZoomdeltaを指定することで、MUGEN1.1でparallaxがズームアウトした時と同じ挙動を再現できる。
・Zoomscaledelta
BGレイヤーのパラメータ。 Zoomdeltaに逆補正をかけることができる。 ズームアウト時に画像の比率が歪むのを逆補正をかけて戻すのが主な使い道。 数値はxとyの2つを読み込み、それぞれを省略して片方だけに逆補正をかけることも可能。
・Xbottomzoomdelta
BGレイヤーのパラメータ。 ズームアウト時の画像の底辺のXスケールの縮小率を指定する。省略時は1。Autoresizeparallaxが1でないと機能しない。 Widthの立体視差を使用したステージで大きなズームアウトを行うと、底面のXスケールが異常に小さくなり酷いとフリーズする現象の対策。この現象は仕様上正しい動作なので、新たにパラメータを追加し記述で対策できるようにした。
キャラクターdefファイルの追加パラメータ:
・Portraitscale
Infoに書き込む ポートレイトの表示倍率を指定する(Localcoord準拠の表示倍率は上書きされる)
ステージのZoomdeltaについて:
Zoomdeltaの2項目はMUGEN1.1では読み込まないが、ここではY方向のZoomdeltaとして処理するようにした。 省略した場合は1項目と同じ値が入り、MUGEN1.1と同様の処理を行う。
BGctrlのSinYとSinXについて:
MUGEN1.1にはBGctrlのSinYとSinXがBGCtrlDefのlooptimeを無視するバグがある。 そのためIKEMEN GOではMUGEN1.1を想定したステージのSinYとSinXの動きがおかしくなることがある。 BGCtrlDefのlooptimeと、SinYかSinXのValueの2項目(周期)の数値を合わせることで対処できる。
ExplodのXangleとYangleについて:
MUGEN1.1ではこれを使うと微妙に視野角が働くため位置によって勝手に画像が歪むが、IKEMEN GOでは正射影で描画しているためこの歪みがない。 現状この歪みが無くなることによってエフェクトがおかしくなるキャラが確認できず、製作者としても歪みがないほうが作りやすいと思うため、この仕様で良しとする。
Zoomoutによるboundhighの変動処理を入れていない理由:
MUGEN1.1ではZoomoutの値によってboundright、boundleftが変動するため、IkemenGOでもこれに対応する処理を入れている。
同様にboundhighもzoomoutの値によって変わるが、boundhighの場合修正すべき値がステージによって一定でないため、修正処理を入れていない。 この修正すべき値が一定でない理由は、ステージのboundhighを決定付ける背景レイヤーのzoomdeltaがステージによって異なるから。boundrightとboundleftでは基準となるzoomdeltaが1の背景レイヤーがほぼ必ず存在するためzoomoutの影響によってズレてしまう値もステージ問わず一定になる。一方boundhighはそれを決定付ける背景の上限に相当するレイヤーのzoomdeltaが、あまりスクロールしないようになっていると0.2だったり、逆に一枚絵ステージの場合は1だったりする。この場合zoomdeltaが1のステージより0.2のステージの方が補正値が小さくなる。そしてどのレイヤーがboundhighを決定付けているのか、defを読んだだけではわからない(zoomdeltaが一番小さいレイヤーとは限らない)。よってboundhighのズレを自動的に修正することはできない。MUGEN1.1でこれが問題にならないのは、ズームアウト最大状態でないとステージの表示上限に到達しないバグがあるため。そしてこれに合わせてboundhighが設定される場合があるために、ステージによって修正すべき値が一定でなくなっている。 また、1.1のズームアウトのバグを無視してboundhighを設定している製作者が少なからずいるという事情もある。この場合は補正を入れないのが製作者の意図通りの動作となる。