Code edit with smashline (技mod)解説

 

○前置き

 この記事は自分でスマブラの技modを作りたいという方のための製作ツールの導入および使い方の解説となっております。
 筆者はいろいろとにわかなため所々分かりづらい部分もあるかと思いますがご了承ください。また、注意事項をよく読んでから開始してください。

 

○注意事項

・このツールの導入及び使用によって生じたあらゆるものの不具合に関して筆者は一切の責任を負いません
・筆者はツールの製作者ではありません。そのため、質問をされても分からない可能性の方が高いです。ご了承ください。
・筆者はWindows使用者のため、Windows目線で進めていきます。
・パソコン内にプログラミング環境を構築するため、ある程度の空き容量を必要とします。(最低でも10GB以上?)
・導入、使用は自己責任でお願いします。

以上全てを了承しましたら以下から導入を進めていきます。


○導入方法

 まずは必要なものをインストールしていきます。始めに以下の4つをインストールしていきます。
・The Visual Studio C++ build tools
・Visual Studio code
・Rust
・Git

 では、上から順にインストールしていきましょう。
The Visual Studio C++ build tools
 リンク先のページに飛び、Build Toolsのダウンロードをクリックしてインストーラをダウンロードします。ダウンロードしたものを起動してそのまま進めていくと下の画像のようになるので、左上の「C++ Build Tools」にチェックを入れてインストールします。必要容量が6GBとかあるので空き容量はしっかり確保しておきましょう。インストールにはしばらくかかる場合があるので、スマブラでもして時間を潰してください。

画像
Build Toolsインストール画面

Visual Studio Code (以下 VSCode)
 リンクから自分のパソコンに合ったものをインストール、実行してください。
 インストール時は特に何も弄らず、デフォルトのまま進めてOKです。

Rust
 現在、このツールはRustの最新版に対応していないため、対応しているVer.1.24を使用します。リンクからインストールしたものを実行してRustをインストールしてください。
 最新版を既にインストールしている場合はコマンドプロンプトを開き「rustup self uninstall」を実行することでアンインストールすることができます。

Git
 リンクから自分のパソコンに合ったものをインストール、実行してください。
 実行したらインストール時の設定を行います。英語でいろいろ出てきますが、しばらくはデフォルトのまま次へ進んでいきます。何度か次へ進んでいくと下のような画面になるので、リストから画像と同じもの「Use Visual Studio Code as Git's default editor」を選択します。

画像
Gitインストール画面1

 その後、またデフォルトのまま何度か進んでいき、下のような画面になったら、下のほうの選択肢にチェックを入れて次へ進みます。

画像
Gitインストール画面2

 以後は何も触らず、デフォルトのまま次へ進んでいき、インストールの文字が出たらそのままインストールします。

 以上でひとまず作業の一区切りとなります。ここからは、コマンドプロンプトを使用して必要なものをダウンロードしていきます。

 まず始めにCドライブ直下に作業用のフォルダを作成してください。名前は何でも構いません。
 作ったらそのフォルダを開き、その場所でコマンドプロンプトを開きます。コマンドプロンプトは下のようにフォルダの場所をクリックして「cmd」と入力することで開けます。

画像
コマンドプロンプトの開き方

 コマンドプロンプトを開いたら始めに念のためRustとGitが正常にインストールされているか確認します。
 まずは「cargo」と入力し、Enterを押してください。この際、Rustが正常にインストールされていればRustの使い方が表示されます。表示されない場合、再度インストールしてみてください。
 次に「Git」と入力し、Enterを押してください。先ほどと同様、Gitが正常にインストールされていれば使い方が表示されます。

画像
Rust 使い方


 2つとも確認が出来たら今度はコマンドプロンプトで必要なものをインストールしていきます。
 先ほどのコマンドプロンプトに「cargo install cargo-skyline」と入力してEnterを押します。するとインストールが始まるので終わるまで待ちます。
 インストールが終了したら「cargo skyline --help」と入力することでskylineのヘルプを表示することができます。入力しても表示されない場合はおそらく正常にインストールされていないので再度インストールを試してみてください。

 そのあとに「git clone https://github.com/ultimate-research/skyline-rs-template -b smash_smashline」と入力してEnterを押します。これによりインストールが始まるので、終わるまで待ちます。

 終わったら、次は「cd skyline-rs-template」と入力してEnterを押します。これにより、作業場所が先ほどセットアップで作られたskyline-rs-templateというフォルダに移動します。もしくは一度コマンドプロンプトを閉じて、フォルダを移動後に再度コマンドプロンプトを開きます。
 Modの作成はこのフォルダで行うことになります。

 移動したら、今度は「cargo skyline build」と入力しEnterを押します。入力後、そのままダウンロードが始まるもしくは何かダウンロードするか聞かれますので、その場合はy を押してダウンロードを開始します。
 ダウンロード終了後に下の画像の最後の行のようにFinishedの文字とかかった時間が表示されれば導入完了です。

画像
cargo skyline build

 最後のコマンドはmodを作成するためのコマンドとなっており
target/aarch64-skyline-switch/debug 内にmodファイルである.nroファイルが作成されます。
 今後、作成するmodファイルは全て同じ場所に作られます。

・エラーが発生する場合
 ここまでやって上手くいかない場合は下の2つのコマンドを試してみると改善することがあるので試してみてください。
「rustup toolchain uninstall nightly-2022-06-19-x86_64-pc-windows-msvc skyline skyline-v3」
「cargo skyline update-std」
2つめのコマンドは完了するまでかなり時間を必要とします。また、コマンドを入力しても何も表示されないので何も起こっていないように見えますが、プログラムは問題なく動いているので気長に待ちましょう。



○使用方法その1(ACMD)

 それでは、ここからはmodの作り方を解説していきます。
 サンプルも一緒にインストールしてるので、はじめはそれを見ながら解説していきます。
 まずはsrcフォルダを開きます。すると既に3つのフォルダと1つのファイルがあると思います。ここでは基本的にファイター毎にフォルダを分けてmodを作ります。
 今回はmarioのフォルダを開きます。その中にmodという名前のファイルがあるので、それをVSCodeで開きます。
 開くと下の画像のようなものがあると思います。画像の上の #[acmd から一番下の }までで1セットで、1つの技を変更できるようになっています。基本的に下線部および線で囲った箇所以外は触りません。新しくmodを作っていく際はこの1セットをコピペして必要な箇所を変更していくやり方が楽だと思います。

画像
技変更用の1セット

 上から順に説明していきます。
 見にくいですが1行目の青線部(agent = "mario")は変更したいファイターを記述します。ファイター毎にどう記述すれば良いかは以下のリンクより確認します。DLCファイターは名前と違ったりするので確認必須だと思います。
例:ジョーカー=jack、勇者=brave、テリー=dolly
https://rubendal.github.io/ssbu/#/

 リンク先に飛んだら左上のCharactersをクリックしてください。クリックするとファイターが並んでいるので、技を変更したいファイターを選びます。すると以下の画像の様になっています。

画像
マリオ 技ページ

 このページの「Article」に書いてあるものを「agent = " "」の「" "」内に書きます。
 通常は一番上のものを書きますが、飛び道具などを変更したい場合はArticleのタブを開くと出てくるので、そこからコピペします。

 次の緑線部(game = "game_attackairf")には技の種類が入ります。技の種類は先ほどのページの「Script」タブを開いてみるとなんとなく分かると思うのですが念のために技の見方を書くと以下のようになります。
 スマッシュ攻撃=4、強攻撃=3、弱攻撃=1、百烈攻撃=100、
 必殺技=special、空中攻撃=air、掴み=catch、投げ=throw、
 上方向=hi、下方向=lw、横方向=s、前方向=f、後ろ方向=b
例:上スマッシュ=hi4、空中後攻撃=airb、下必殺技=speciallw

 「game = " "」の「" "」内はこの技の名前の前に「game_」を加えて書けば基本的にOKです。
 今回の例の空中前攻撃の場合は「attackairf」に「game_」を加えて「game_attackairf」となります。
 ただし、注意点として必殺技だけは少し異なる場合があるので名前をしっかり確認しましょう。少しでも違うと作っても技に反映されないので、注意してください。

 また、Scriptに載っていない行動を変更したい場合は以下のリンクに全ての行動が載っているので良ければどうぞ。
https://docs.google.com/spreadsheets/d/1q_TpWoQkr9YWgQ7fc3JpHuU9zKfCLtl80Uodcyc0NPY/edit#gid=0

 次の2行目の赤色の下線部(mario_fair)は、ただの識別用の記述です。自分で分かるように適当に書いて大丈夫です。

 最後のオレンジ色の枠で囲った部分には、技の内容すなわち技のフレーム、威力などを記述します。この技のプログラムのことをACMDと呼びます。この部分が一番の要です。自分で1から書くこともできますが、多くは技の威力とか範囲をちょっと変更したいだけだと思います。なので、まずは技の元々のプログラムをコピペします。

 先ほどのページのscriptより変更したい技を選ぶとその下にその技のプログラムが記述されているので、これをコピペすればOKです。

 基本的にこのサイトを利用してmodを作るのをおすすめします。変更したい技をサイトで開いてコピー、さっきの赤枠内にペーストで大体済むので。加えて、以下のサイトで攻撃判定の位置や大きさを確認しながら作業すると作りやすいです。
https://ultimateframedata.com/

 また、技にいろいろ追加したい場合は他の技のscriptからコピペするか以下のリンクから検索して追加することができます。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=

 次はacmdの中身に解説していきます。マリオフォルダのmodファイルを開き、少し下にいくと以下の画像のようなマリオの空下攻撃を記載したものがあります。今回はこれを見ながら解説します。

画像
マリオ空下

 まずは一番の基礎の攻撃判定について解説します。画像の51行目(左の数字が行数)を見ます。この「ATTACK( )」が攻撃判定について書いたものです。この中身について左から順に説明していきます。
・ID
攻撃判定を判別するための番号、攻撃判定を増やす時はこの数字を同じフレーム内で被らないように変える。
・Part
不明。基本的に0。
・Bone
攻撃判定の位置の原点。ここが"top"の場合はファイターの足下が原点となる。
・Damage
与えるダメージ量。
・Angle
吹っ飛ばし角度。
・KBG
基本吹っ飛ばし値。
・FKB
固定吹っ飛ばし値。これが0以外だと蓄積パーセントにかかわらず吹っ飛ばす距離が一定になる。
・BKB
パーセント依存の吹っ飛ばし値。蓄積パーセントが多くなるほど吹っ飛ばす距離が伸びやすくなる。
吹っ飛ばし値に関しては気になる場合は調べてみてください。
・Size
攻撃判定の大きさ。攻撃判定の円の半径。
・x、y、z
Boneで決めた原点からの距離。原点が"top"の時はyが上下方向、zが左右方向となっている。
・x2、y2、z2
攻撃判定の円の2つ目の中心位置。以下の画像のように攻撃判定を長い円にしたい場合に使う。使わない場合は「LUA_VOID」と書いておく。

画像
ファルコンキック

・Hitlag
技を当てた時の硬直時間。ヒットストップ。
・SDI
不明。
・Clang_Rebound
不明。
・FacingRestrict
相手の向き?シュルクの横Bに使われているっぽい。
・SetWeight
おそらく体重を固定する。ここがtrueの場合、相手の体重を100として吹っ飛ばしを計算する。使わない場合はfalse。
・ShieldDamage
シールド削り値。
・Trip
不明。
・Rehit
おそらくここが1以上の時、技が複数回ヒットする?
・Reflectable
反射可能かどうか。trueが可能。falseが不可。
・Absorbable
ネスの下Bなどで吸収可能かどうか。
・Flinchless
攻撃が当たった際にひるむかどうか。パルテナの横スマなどの風判定についている。
・DisableHitlag
不明。
・Direct_Hitbox
不明。
・Ground_or_Air
攻撃判定の当たる状態の設定。ここが「COLLISION_SITUATION_MASK_G_d」,「COLLISION_SITUATION_MASK_G」の場合は相手が地上にいる場合にしか当たらない。「COLLISION_SITUATION_MASK_A」の場合は相手が空中にいる場合にしか当たらない。どちらでも当たるようにする場合は「COLLISION_SITUATION_MASK_GA」と書く。後で説明するが埋め攻撃などをしたい場合に使う。
・Hitbits
不明。
・CollisionPart
相手のどの部位に攻撃が当たるかの設定。例としては、マルスのNBには相手の頭の設定があり、頭に当たった際に威力が上がるようになっている。
・FriendlyFire
味方に攻撃が当たるかどうか。フレンドリーファイア。
・Effect
攻撃を当てた際のエフェクト。
・SFXLevel
攻撃を当てた際の効果音の音量。
・SFXType
攻撃を当てた際の効果音の種類。以下一覧。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=collision_sound_attr_
・Type
攻撃の種類。スピリットで強化をするときに使われる。(腕攻撃強化など)

 攻撃判定の中身に関しては以上となります。ここからは攻撃判定以外の説明をしていきます。

画像
マリオ空下

 画像の45行目(左の数字は行数)を見ます。ここがマリオの空下の一番最初になります。ここから順番に説明していきます。
・frame(Frame=5)
これは技の出始めから何フレーム目という意味になります。
・if(is_excute){ }
これを書くことで{ }内に書いてあることを実行します。基本的にこれは「frame(Frame= )」とセットと考えておくと良いと思います。
・WorkModule
~Module::~の形のものは特殊な処理がなされます。
今回は()の中のフラグ、着地した際に空中攻撃の着地姿勢になるフラグをオンにするという処理をしています。

 ここまでを整理すると、マリオの空下は5フレーム目に空中攻撃の着地姿勢のフラグをオンにする、すなわち5フレーム以降に着地すると空下の着地姿勢になるということです。

 続けてその下を見ると「for(5 Iterations){」と書いてあります。これは{ }内の処理は書いてある数字の回数行うというものです。

 51、52行目は攻撃判定なので飛ばして、画像54行目に「wait(Frames=1)」と書いてありますが、これはその前のフレームから何フレーム後という意味になります。先ほどの「frame(Frame=)」とこれの2つを使って何フレーム目に何をするということを決めていきます。

 次に画像56行目を見ると「AttackModule::clear_all()」がありますが、これは攻撃判定を全て消去するという処理になります。全てではなく一部だけを消去する場合は「AttackModule::clear(ID=0)」を入力します。IDには消したい攻撃判定のIDを入れればいいです。

 以上で基本的なACMDの説明を終わります。基本的にはコピペで問題ないのですが、一部コピペするだけではエラーを起こすものがあります。これに関しては後のエラー事例集で解説します。


 こうして技の内容を変更したら、下までスクロールしてください。すると下の画像のようになっているはずです。ここの install_acmd_scripts!の括弧内に先ほどオレンジ色の下線部に書いたものと全く同じものを書いてください。技が複数の場合は1つ書いた後にカンマを入れるのを忘れないでください。必要ない mario_frame、mario_fairなどは削除して構いません。

画像
インストール設定

 できたらファイルを保存して、このファイルでの作業は完了です。
 このあとmodを作成しますが、その前にフォルダを1つ前に戻ってsrcフォルダ内のlibという名前のファイルを開きます。開くと下の画像のようになっていると思います。このmarioなどの部分を使いたいmodファイルの入っているフォルダの名前に置き換えてください。複数ファイターを同時に変更も可能です。
書けたらファイルを保存します。

画像
libファイル内

 これで全ての準備が完了しました。あとは1つファイルを戻ってskyline_rs_templateのフォルダでコマンドプロンプトを開き、「cargo skyline build」と入力することでmodを作成できます。
 作ったmodは以下の場所に保存されています。
target/aarch64-skyline-switch/debug
 あとは、作ったmodをsdカード内の
atmosphere/contents/0100A800016E000/romfs/skyline/plugins/
に移動することで使えるようになります。ただし、作ったmodを動かすのに以下ものが必須となるので、インストールして同じ場所に入れます。
smashline-hook

ただしskylineで製作されたmodを併用したい場合は1つ古いバージョンのsmashlineをインストールする必要があるっぽいです。

 以上で基本は終了です。それではmod製作頑張ってください!


・smash script
 modファイル内で以下の画像のような部分があって気になった方もいるかもしれないので一応解説します。

画像
smash script

 技の内容の書き方には2種類あり、その2つ目がこのmacrosを使用したものです。とはいえ、以下のリンクから元の技データをコピペしたら後のやり方は変わらないと思うのでお好きな方でどうぞ。

https://github.com/WuBoytH/SSBU-Dumped-Scripts/tree/main/smashline 




○使用方法その2(エフェクト、効果音)

 ACMDを使うことで技のエフェクトや効果音を変更することもできます。ここからはその方法を説明していきます。
 とはいえ、その1でのやり方とほとんど変わりません。

画像
ACMD エフェクト

 その1で使っていたこのプログラムの1行目にあるscriptとcategoryの「game」をエフェクトを変更する場合は「effect」、効果音を変更する場合は「sound」と書き換えることでエフェクトや効果音の変更が可能になります。
 技の元のエフェクトや効果音については以下のサイトに載っているのでコピペして使用することをオススメします。

https://github.com/WuBoytH/SSBU-Dumped-Scripts/tree/main/skyline-acmd

 注意点としてはエフェクトと効果音のどちらとも各ファイター固有のものもしくは共通のものしか基本的に使用することはできません。共通のものというのは「se_common_swing」などの名前にcommonが入っているもののことです。

 基本としては以上となっています。あとはエフェクトを書く際のプログラム(EFFECT_FOLLOW())の中身について左から順に説明していきます。

・hash40
エフェクトの種類。ここにどんなエフェクトを発生させるかを書く。

・Bone
その1と同じ。エフェクトを発生させる位置の原点。

・x、y、z
Boneで決めた原点からの距離。

・xRot、yRot、zRot
それぞれx軸、y軸、z軸に対しての回転角度。

・Size
エフェクトの大きさ

・Terminate
エフェクトが残るかどうか?

以上のようになっています。

 あとは効果音についてですが、vcと書いてある場合はファイターの声でseと書いてある場合は効果音であることが分かっていれば良いと思います。



○使用方法その3(OPFF)

 一応このツールは技だけでなくゲームのちょっとしたシステム面にも変更を加えることができます(A Once-Per-Fighter-Frame 省略してOPFF)。ここからはそれについて説明していきます。技の内容を変更するときよりもおそらく少し難しくなるので、やる場合はそのつもりでお願いします。

 とはいえシステム面に変更を加えると何が出来るようになるか分からないと手の出しようがないと思うので具体例を挙げると
・アピールボタンで最後の切り札を出せる
・技を当てたらクリティカル演出を出す
・空中浮遊をできるようにする
・技をキャンセルできるようにする  etc..
以上を見て分かるように、割と何でもできます。
 ただし、その代わりに先ほどのようにコピペでできる訳ではなく自分で1からプログラムを書いていくことになります。

 例としてsrcフォルダ内のcustomフォルダを開き、その中のmodファイルを開きます。開くと下の画像のように「global_fighter_frame」と書いてあるプログラムがあるはずです。これが基本の形の1つとなります。それともう1つ「global_weapon_frame」と書いてある方は飛び道具などのプログラムを変更する際に使用します。
 全ファイターで共通のmodを作る場合はこれを使用します。

画像
global_fighter_frame

 逆に1人のファイターのみのmodを作る場合はマリオフォルダ内にあった以下の部分を使用します。

画像
wahoooooooo!


 ここからは例としてフォックスのmodを作りながらやり方を解説していきます。
 まずはフォックス用のフォルダを作りそこにマリオフォルダのmodファイルをコピペします。その後、modファイルを開き以下の様に変更します。
(agent をMARIO→FOXへ、mario_frame→fox_frameへ、wahoooo!削除)

画像
fox modファイル内

 これで下準備が済みましたので本題のプログラムに入ります。まずは、以下の文章を括弧内に追加します。
let status =StatusModule::status_kind(fighter.module_accessor)
 これは単語の定義付けとなります。まあ場合によってはこういうものが必要くらいに思っておけば問題ありません。

 次は{ }内に以下の画像のように文章を追加します。このように「if ~ { }」の形はif文と呼ばれ、~の場合{ }内のことをするというプログラムになります。これは非常に便利な形でよく使います。これは条件が複数あるため形が変わっていますが、if文となっていてフォックスが下B関連の挙動をしているときという条件になります。

画像
フォックス 下B if文

 コピペ用
if [
*FIGHTER_STATUS_KIND_SPECIAL_LW,            *FIGHTER_FOX_STATUS_KIND_SPECIAL_LW_LOOP,          *FIGHTER_FOX_STATUS_KIND_SPECIAL_LW_HIT,          *FIGHTER_FOX_STATUS_KIND_SPECIAL_LW_END
 ].contains(&status) {
}        

 次にジャンプでキャンセルするためにジャンプボタンを押したらジャンプするようプログラムを書いていきます。
 まずはジャンプボタンを押したらという部分を実際にプログラムで書くと以下の画像のようになります。

画像
ジャンプボタン if文

 いきなりここだけ見ても何が何だか分からないと思うので解説します。
 まずは以下のリンクを開きます。すると、何かずらっと並んでいますがこれらはゲームを動かす様々なプログラムとなっています。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=module

 この中からControlModuleを探してクリックするとさらにプログラムがいくつか出てきます。その中で今回使用したcheck_button_triggerをクリックすると下の画像のようなものが出てきます。

画像
check_button_trigger 解説

 argumentsとはプログラムを動かすのに必要な要素のことで、一番上には必要な要素の数とその要素の種類が記載されています。真ん中には使用する要素の解説、一番下には使用例が書いてあります。
 arg1のBattleObjectModuleAccessorは fighter.module_accessorを書いておけば基本的に大丈夫です。
 arg2のc_intは使用するプログラムごとに変ります。今回はボタンの種類を書きます。ちなみにボタンの種類は以下のリンクより確認できます。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/app/lua_bind/ControlModule/fn.check_button_trigger.html?search=control_pad_button

 コピペ用
if ControlModule::check_button_trigger(fighter.module_accessor, *CONTROL_PAD_BUTTON_JUMP){
}

 そうしたら最後にファイターがジャンプをするようプログラムを書きます。結論から言うと以下のようなプログラムを書きます。

画像
ジャンププログラム

 これも先ほどようにStatusModuleから使用するプログラムのページに行くと以下のようになっています。

画像
change_status_request_from_script 解説

 arg1は先ほどと同じでarg2は今回はファイターの状態、STATUS_KINDを記入します。
 arg3のboolにはtrueかfalseのどちらかを書きます。
 ファイターの状態は以下のリンクより確認できます。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=fighter_status_kind

 コピペ用
StatusModule::change_status_request_from_script(fighter.module_accessor, *FIGHTER_STATUS_KIND_JUMP_SQUAT, true)

 これでプログラムの記入は完了となります。
 プログラムを書いたら下まで行き、画像のようにinstall_agent_frames!内に識別用の名前を書きます。

画像
インストール設定2

 そうしたら最後に忘れずにlibファイルを開きフォックス用の文章を追加します。

画像
libファイル内

 これで全てのプログラムと設定が完了しましたので、コマンドプロンプトで「cargo skyline build」と入力すればmodが完成します。

 以上でシステム面での解説を終わります。
 正直、プログラムが多すぎるので筆者に質問されても分からないことの方が多いです。
 まあこちらに関しては慣れるまで難易度も高いので、試行錯誤しながら少しづつ進めることをオススメします。


○プログラム例

 使えそうなものや面白そうなものを適当に書いていきます。

ItemModule::have_item
 アイテムを生成することができます。書く際は以下のような感じでITEM_KINDの部分に生成したいアイテムを書きます。ただし、全てのアイテムを生成できるわけではありません。
 ACMDで書く場合はmodule_accessorはいらないです。

ItemModule::have_item(module_accessor, smash::app::ItemKind(*ITEM_KIND_BOMBHEI),0,0,true,true);

 アイテムの種類は以下のリンクで確認できます。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=item_kind


ControlModule::check_button_trigger
 指定したボタンを押したかどうかを判定してくれるプログラムです。
書く際は以下の様な感じです。基本的にはif文として使用します。
 ACMDで書く場合はmodule_accessorはいらないです。

ControlModule::check_button_trigger(module_accessor, *CONTROL_PAD_BUTTON_APPEAL_LW)

 ボタンの種類は以下のリンクで確認できます。
https://ultimate-research.github.io/skyline-rs-template/doc/smash/index.html?search=control_pad_button

 OPFFに以下のように書くだけでボタンで好きにアイテム生成できるのでオススメです。

#[fighter_frame_callback]
pub fn global_fighter_frame(fighter : &mut L2CFighterCommon) {
    unsafe {
        let module_accessor = smash::app::sv_system::battle_object_module_accessor(fighter.lua_state_agent);
        
        if ControlModule::check_button_trigger(module_accessor, *CONTROL_PAD_BUTTON_APPEAL_LW) {
            ItemModule::have_item(module_accessor, smash::app::ItemKind(*ITEM_KIND_BOMBHEI),0,0,true,true);
        }
    }
}

 実際にmodを動かすとこんな感じになります。


DamageModule::heal
 このプログラムは回復をすることができます。書く際は以下の様な感じです。ACMDで書く場合はmodule_accessorはいらないです。

DamageModule::heal(module_accessor, -100.0, 0);


DamageModule::add_damage
 
このプログラムは自分にダメージを与えることができます。書く際は以下の様な感じです。ACMDで書く場合はmodule_accessorはいらないです。

DamageModule::add_damage(module_accessor, 100.0, 0);


 最後に自分の作ったmodの一部を置いておきます。よければ参考にどうぞ。
https://github.com/Otaku-house/ssbucode



○エラー事例集

 今後も解決方法が分かり次第追加していきます。

 modを作ろうとしたときに以下の画像のように「warning」と出てくることがありますが、これはプログラムには支障はないので無視して大丈夫です。
 「warning」と出ても下に「Finished」と出ていれば問題なくmodは生成されています。

画像
warning

 ここからはACMDをそのままコピペした時に起こるエラーの解決方法に関して解説します。これに関してはエラーを見て判断するよりACMDの中身を見て判断した方が楽なので、エラーを起こした場合はまずここを確認してエラーを起こすものがないか確認してみてください。

・AttackModule::clear(ID= )
 これは以下のように、()内に「, false」と加えれば動作するようになります。~は元のプログラムをそのまま使用する。
 AttackModule::clear(ID=~, false)

・AttackModule::set_attack_height_all( )
 意外といろいろな技で出てきます。これに関しては現状削除しても問題なく動作しているので、消してしまって構いません。

・ATK_HIT_ABS(FIGHTER_ATTACK_ABSOLUTE_KIND_THROW, ~)
 投げの最後に出てきます。これは以下のように書き換える必要があります。

ATK_HIT_ABS(*FIGHTER_ATTACK_ABSOLUTE_KIND_THROW, hash40("throw"), smash::app::lua_bind::WorkModule::get_int64(module_accessor, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_OBJECT), smash::app::lua_bind::WorkModule::get_int64(module_accessor, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_HIT_GROUP), smash::app::lua_bind::WorkModule::get_int64(module_accessor, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_HIT_NO))

・FighterCutInManager::~
 こちらも投げで出てきます。現在解決方法を模索中ですが、現状削除しても問題なく動作するっぽいので、消しても問題ありません。

・ArticleModule::generate_article(~)
 特殊なエフェクトなどが出てくる技に出てきます。これは以下のように書き直します。
ArticleModule::generate_article(*~, false, -1)
~には()内のものをそのまま書きます。*印を忘れないように注意!

・ArticleModule::change_motion()
 こちらも特殊なエフェクトなどが出てくる技に出てきます。これは以下の画像の様にmethodlib~とセットで出てきます。

画像
パルテナ横スマ

 画像のような場合は以下のように書き換えます。
ArticleModule::change_motion(*FIGHTER_PALUTENA_GENERATE_ARTICLE_GODWING, Hash40::new("attack_s4_charge"), false, -1.0)
*印を忘れないように注意してください。FIGHTER_PALUTENA_~と"attack_s4_charge"はmethodlib~()の括弧内を使います。
書き直したらmethodlib~の部分は必要ないので削除します。
 また、mod内の一番上にいき下の画像の様に「use smash::phx::Hash40;」と書き加えます。

画像
change_motion 追加文章

 これで修正完了になります。


・ArticleModule::remove_exist(~)
 これは特殊なエフェクトなどを消すための文章となっています。これは以下の様に修正します。
ArticleModule::remove_exist(*~, ArticleOperationTarget(*ARTICLE_OPE_TARGET_ALL))
 また、modファイルの一番上に「use smash::app::ArticleOperationTarget;」と書き加えます。

画像
remove_exist 追加文章

・if(methodlib~)
 このような形の場合、多くの場合は上にある文章とセットになっています。というか「methodlib~」の形はそのままの形だとエラーを起こすのでこの形を見つけたらとりあえず消してしまっても基本的に問題ないです。
 例としてピーチの投げを出します。

画像
ピーチ投げ

 この場合は以下のように修正します。
if ArticleModule::is_exist(*FIGHTER_PEACH_GENERATE_ARTICLE_KINOPIO) == true {



○参考リンク

・導入方法
https://docs.google.com/document/d/1y_JX5LNsQ8jUBfrghRkL8VkvfMWUIXSrrscM5qj7s6U/edit

・使い方その1
https://docs.google.com/document/d/1V0qgl3e9OwZVEd5Me-Yrl3ne7sgpaIdVezBqtmdlzyw/edit

・使い方その2
https://docs.google.com/document/d/11V-HKySB5Yyv0ikcME8yztyiJNrJ-fVfv0ICkYqUh5o/edit

・Smash Ultimate Modding Hub
(mod使用者のdiscordサーバー 基本英語)
https://discord.gg/ASJyTrZ


この記事が気に入ったらサポートをしてみませんか?

コメント

oyako
成功しました!
必要なファイルの再ダウンロードして、再配置したらうまくいきました。
こんな初心者にこんな長い期間のご教授本当にありがとうございました。

念のために他のサイトで調べた情報(動画)を皆さんに共有できるようにURLを貼っておきます。英語ですけど自動翻訳があるのでわかると思います。

https://www.youtube.com/@LilyLambda/videos

オタク家さん本当に感謝です。
MKDR
こんにちは。mod初心者の者です。アピールで最後の切り札を発動できるように導入をしているのですが、オタク家さんのボム兵のデータのアイテム名の所をSMASHBALLにするだけでは導入することはできませんか?名前を変更してnroファイルにしてみたのですがソフトの起動時にエラーが出てきてしまってできない状態になってしまいます。スマッシュボールはアイテムの所では設定できなかったりするのでしょうか?
Asriel Dreemurr
古いmoveset modにsmashline2と互換性を持たせるようにするためにはどのようにコードを書き換える必要がありますか?
オタク家
Asriel Dreemurrさん
少し調べたところ、残念ながらsmashline1と2は一切互換性がないようです
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。
Code edit with smashline (技mod)解説|オタク家