自キャラのグラフィックを差し替える方法
このゲームでは、自キャラのグラフィックはアーマー依存だが、
アーマー無関係に見た目を変えてプレイしたい、
という需要はありそうなので方法を書いておく。
GML LoaderとCustom Sprite Frameworkを使ったキャラ差し替え
※注意※
この文章は、2023/01/19(ゲームバージョン0.28.3)時点でのものです。
将来的にずっと同じ方法が使える保証はありません。
※重要な注意※
ゲームやセーブデータに不具合が発生したりしても執筆者は一切関知しません。
自分でバックアップして自分でなんとかしてください。
0、準備
data.winとセーブデータをバックアップする。
UndertaleModToolをダウンロードして、data.winを開けるようにする。
このあたりについては、非公式日本語化ページの、
方法2(従来通りのやり方) を参照のこと。
1、ゲーム内のグラフィックに差し替える
data.winを開いたUndertaleModToolで、左のメニューからCodeを選び、
gml_Object_obj_player_Step_0 を開く(ダブルクリック)
少し待つと右にコードエディタが開かれる。
7行目~18行目に書かれているのが、
アーマー装備中ならアーマー側で指定されたグラフィックを使い、
そうでなければここで指定したグラフィックを使う、という処理である。
15行目から17行目の3行をコピーして、}の次(19行目あたり)に貼り付ける。
ここでdata.winを上書き保存し、保存が終わったらゲームを開始してみる。
アーマーを装備しても外しても、自キャラのグラフィックが変化しなければここまでOK。
ゲームを閉じて、UndertaleModToolに戻る。
gml_GlobalScript_lista_item を開く(右クリックから新しいタブで開くとよい)
ctrl+fで検索窓を開き、好みのアーマーを検索。
例えば Arman Suit なら arman で検索する。
13420行目から13422行目の
armor_s_idle[a] = 193
armor_s_run[a] = 194
armor_s_dead[a] = 195
がそのアイテムを装備したときのグラフィック指定なので、
gml_Object_obj_player_Step_0 で、先ほどの行をこの数値に書き換える。
この状態でdata.winを上書き保存し、保存が終わったらゲームを開始。
アーマーに関係なく、常にArmanの外見になっていれば成功だ。
元々書かれていた7行目~18行目は完全に無駄な処理になってしまっているので、
何だったら消してしまっても構わない。
2、自作のドット絵に差し替える
次に、ゲーム内の既存画像ではなく、自作したドット絵に差し替える方法。
まず、とりあえずは、
UndertaleModToolのScripts > Resource Unpackers > ExportAllTextureGrouped を選んで、
ゲーム内のテクスチャを画像ファイルに書き出しておこう。
Export_Textures\Sprites の下にキャラ画像等々が書き出されるので参考にする。
ゲーム内の既存画像に合わせるなら、16x16のサイズで、
待機2、移動3、死亡1、の6つの画像が必要になる。
(自分の死亡グラフィックじっくり見ることもないんで、面倒なら不要かもしれない)
さて、とりあえず適当なサンプル画像を作ってみた。
sample1_0.png(待機1)
sample1_1.png(待機2)
sample2_0.png(移動1)
sample2_1.png(移動2)
sample2_2.png(移動3)
sample3_0.png(死亡)
これら6つの画像を、spriteという名前をつけたフォルダに入れておく。
ここでつけたファイル名には意味があり、
ファイル名のうち、 _0.png などを除いた部分がスプライトの名前として扱われ、
そこが同一のものは同じスプライトの画像して登録される。
UndertaleModToolのScripts > Resource Repackers > ImportGraphics を選択し、
自作ドット絵を入れたspriteフォルダを指定する。
インポートが完了したら、
UndertaleModToolの左リストから、Spriteを開いてみる。
画像の登録が成功していれば、Spriteの一番下に、 sample1 sample2 sample3 が追加されているはず。
追加を確認したら sample1 sample2 sample3 を開き、
表示位置を調整するため、Originの2枠(X軸とY軸の表示位置)に8を入れておく。
また、Is special type? にチェックを入れて、Versionを3にしておく。
(アニメーション速度等に影響する様子だけどよくわからない)
Spriteが登録できたら、自キャラに設定する。
gml_Object_obj_player_Step_0 を開き、今追加した画像を指定する。
指定する数値はスプライトのID(登録順)になる。
0.28.3の場合は、デフォルトで1986種類(ID:0~1985)が登録されているので、
追加したスプライトのIDは 1986 1987 1988 になる。
なお、この1986という数は、ExportAllTextureGroupedで出力した
Export_Textures\Sprites内のフォルダ数から持ってきているんだが、
他に手頃な方法があれば誰か教えて欲しい。
UndertaleModToolでスプライトを開いたとき、右下の隅っこにIDが表示されるので、そのIDを指定すればOK
数値を指定したら保存する。
このとき、保存先が画像を読み込んだフォルダになってることがあるので注意。
ゲームを起動して、画像が差し替わっていれば成功となる。
画像を更新したい場合。
Embedded textures に追加されたテクスチャを Export し、
書き換えた後で Import するのがよいと思う。
おまけ
他のキャラと並ぶと違和感あるけど、目がある方がかわいいだろうか?
おまけ2、左右非対称のキャラクターを使いたい場合
逆向き用の画像を用意して入れ替える指定をすれば、左右非対称のキャラクターを使うこともできる。
というわけで適当な画像のサンプルが以下。
akane1_0.png(待機1)
akane1_1.png(待機2)
akane2_0.png(移動1)
akane2_1.png(移動2)
akane2_2.png(移動3)
akane3_0.png(死亡)
akanel1_0.png(待機1・左向き用)
akanel1_1.png(待機2・左向き用)
akanel2_0.png(移動1・左向き用)
akanel2_1.png(移動2・左向き用)
akanel2_2.png(移動3・左向き用)
例によって ImportGraphics から画像を読み込み、追加された SpriteのOriginやIs special type? 等の設定を行う。
その後、 gml_Object_obj_player_Step_0 を開き、右向きと左向きで別画像を読み込むように指定する。
if (x > mouse_x) { 処理 }else{ 処理 }
という書き方で、マウスがキャラより左にある(キャラが左向き)かどうか、で処理を切り分けることができるので、sprite_idleとsprite_runに、左向き用のスプライトを指定する。
例によって、指定する数値は、スプライトを表示した際に、画面の右下隅に表示される数値となる。
自キャラの左右にこだわりがあるなら試してみてもいいかも?
おまけ3、セーブスロットごとにグラフィックを変更したい場合
バージョンアップとかがあると、新キャラでゲームを始めたくなるし、新キャラでゲームを始めると、これまでとは別のキャラ画像にしたくなるものだ。
というわけで、これまで通りに画像を準備してimportして、origin等々の設定をして、
gml_Object_obj_player_Step_0 で、セーブスロットごとに画像を指定する。
global.slot_selected が、セーブスロット番号(1~3)を保持してる様子なので、
その値で分岐して、グラフィックを指定すれば、セーブスロットごとに別の画像を指定できる。
switch文でもいいと思うけど、自分はif文の方が心が落ち着くのでif文。
毎フレーム実行される場所で決まり切った分岐するのは無駄だとは思うけど、gml_Object_obj_player_Step_0 だけ修正すればいい、という簡便さを優先。
なお、スプライトのIDはスプライト表示時に右下に表示されている。
サンプルの画像について
Q1、サンプル画像、使ってもいい?
A1、素人作でよければ、改変、再配布、動画配信等々、自由に使ってくれて構わないけど、
たぶん『東北きりたんの二次創作物』とか『琴葉茜の二次創作物』になるんで、そのへんの許諾は各自勝手に調べてくれ。
Q2、data.winでくれないか?
A2、以下の理由によりdata.winはアップしない
・バージョンアップのたびにファイル公開するのめんどくさい
・日本語や他Modのdata.winと排他になってしまう
・自作のドット絵に差し替える方法って書いてるやろ
他の誰かがdata.win作って公開するのは好きにしてくれて構わない。
GML LoaderとCustom Sprite Frameworkを使ったキャラ差し替え
0.40環境でNEXUSのMod等を見たりいじったりしたところ、 GML LoaderとCustom Sprite Framework環境での画像差し替えがわりと手軽でよかったので共有しておく。
Nexusのアカウント持っててVortexだのMO2だのを使ってるような人であれば、 UndertaleModToolを使う方法よりも、こちらの方法の方が楽じゃないかと思う。
GML Loader
https://www.nexusmods.com/zerosievert/mods/34
Custom Sprite Framework
https://www.nexusmods.com/zerosievert/mods/16
GML Loaderについて
GML Loaderは、特定フォルダに置かれたスクリプトファイル(gmlファイル)を、 起動時に個別に置き換えてコンパイルしてくれるもの。
data.winを全更新せずに、個別のスクリプトを追加したり上書きしたりできる。
ただし、利用するためには、 通常のゲーム起動ではなく、ローダーの実行ファイル経由でゲームを起動する必要がある。
Vortexなら、インストール後にダッシュボードのToolsからSet as primaryするのがいいだろうか。
なお、GML Loaderから起動した場合、いきなりゲームが起動せず、いわゆるコマンドプロンプトが表示される。
メリット
- その個別のスクリプトに変動がなければ、ゲームがアップデートされても動作する。
- 同一のスクリプトを修正していなければ、スクリプト修正系のModを複数共存させることができる。
- Modの作成や公開が比較的楽(いちいちUMTでdata.winを作り直さなくていいため)
デメリット
- 利用者が環境を準備する必要がある。
- ゲーム起動がちょっと面倒になり、ちょっと起動が遅くなる。
画像
画像の読み込み部分はCustom Sprite Frameworkをそのまま使うとする。
アニメーションのコマを横に繋げた画像(横幅:16×コマ数)の画像を用意する。
kiri_idle_fcount2_xorg8_yorg8.png
kiri_run_fcount3_xorg8_yorg8.png
kiri_dead_fcount1_xorg8_yorg8.png
Custom Sprite Frameworkの仕様として、ファイル名にSprite登録用の情報を含む。
(fcountはアニメーションのコマ数、xorgとyorgは座標調整)
詳細はCustom Sprite Frameworkのドキュメント(https://www.nexusmods.com/zerosievert/articles/1)を参照のこと。
GMLファイル
UMTで修正するのと同じgml_GlobalScript_player_step_update_sprite.gmlを修正するが、 GML Loaderで読み込むため、単独のテキストファイルとして用意する。
function player_step_update_sprite() //gml_Script_player_step_update_sprite
{
sprite_idle = ds_map_find_value(global.sprite_map, "kiri_idle")
sprite_run = ds_map_find_value(global.sprite_map, "kiri_run")
sprite_dead = ds_map_find_value(global.sprite_map, "kiri_dead")
}
スプライトのIDを指定するのだが、今回は数値の直接指定ではなく、
Custom Sprite Frameworkで、global.sprite_mapというdsマップに、画像名とIDの対応情報が登録されるようなので、それを呼び出して設定するものとする。
"kiri_ilde"や"kiri_run"は、画像名(pngファイル名の最初の部分)を指定する。
ファイル配置
準備したファイルを、GMLは、
ゲームフォルダ\mod\code
画像は、
ゲームフォルダ\mod\textures
に置く。
ZIPでくれ
上で準備したファイルを、指定のフォルダに配置して圧縮したものがこちら。
https://mega.nz/file/gKpmkBbY#1ly07212P4AHSTNeDt8fE7xnWaZfZgCHIHQOc0kV1lA
このzipファイルをVortexにドロップして有効化すればそのままで反映されるはずである。
(MO2は使ってないから知らん)
Vortexで管理すると、有効化・無効化の切り替えとかできるからちょっと便利かもしれない。
なお、左右非対称の場合のサンプルはこちら。
https://mega.nz/file/YKIQzRRR#nY3UslTGtyRSqsTjRDc798sKGWgfioRJroCeNJlDtmU
ちなみに、0.40.23で左右の切り分けをする場合、
if (x > (aim_point_x + 1)){ 左向き }else{ 右向き }
と書くのがよさそうである。
このページの総アクセス数: 14479
今日: 12
昨日: 19
コメント
最新を表示する
>> 返信元
返信ありがとうございます。
うわーマジですかVortex上でやってたのがいけなかったのか起動失敗してました。
手動導入もろもろ試してみます情報ありがとうございました!
>> 返信元
最新のGML LoaderにはConfiguration Fileが同梱されてます
>> 返信元
自分はvortex使ってるけど、GMLはvortexのアップデートの時に変な動きした記憶があります。
①旧GMLをvortex上でアンインストールして
②nexusmodsサイトからGMLの最新ファイルをマニュアルダウンロードして
③ダウンロードした②のファイルをvortexのmod画面下のdrop file(s)にドロップして再インストール
たしかこんな感じで作業しました。
製品版もある程度遊んだし久しぶりに差し替えで遊ぼうと思ったのですがリンク先GMLのConfiguration Fileの正式版が見つからず起動に失敗します。
正式版で差し替えでプレイしている方いらっしゃいましたら情報頂けると大変ありがたいです。
>> 返信元
ご返信ありがとうございます。
その後、解決できました。
①バニラのs_pg1系画像データをCustom Sprite Framework形式で別名保存する。
②自キャラに設定したい画像をs_pg1の名前で準備する。
③npc.json内のs_pg1を①で作ったファイル名に置換する。
④コンパイル?する
で実現できました。
自キャラの画像は中身を差し替えたs_pg1に、他のキャラの画像を中身がs_pg1の別名ファイルに差し替える方式をとりました。
お騒がせしました&重ねてご返信ありがとうございました。
>> 返信元
jsonいじってユニークアーマーをコピーなりで追加して、
その追加したアーマーへ参照する画像データを、自分が着たい画像データに差し替えればいいんじゃない?
追加したユニークアーマーはバーテンとかから買えるようにすりゃいい。
武器追加の応用だからあの辺見て。
すみませんが先駆者様のお知恵を拝借したいのです。
GML LoaderとCustom Sprite Frameworkをつかってプレイヤー画像をs_mypg1という画像に変更していますが、アーマーを着た時はそのアーマーの画像にしたいのです。s_pg1の中身を差し替えるとできますが、NPCまで差し変わるのは避けたいのです。
どうしたらよいのでしょうか?
>> 返信元
正式版(ver.1.0)環境にて、キャラスプライトをmod/legacytextures/ に配置する方法での差し替えが有効であることを確認いたしました。情報の提供ありがとうございます。
>> 返信元
皆様のお陰で差し替えに成功いたしました。本当にありがとうございます。
製品版へのアップデートがもうすぐだということを今日知ったので、またアップデートでやり方が変わってしまうかもしれませんが、取り合えず現状差し替えができたという事実が嬉しいです。本当にありがとうございました。
>> 返信元
Custom Sprite Framework の gml_InitCustomSpriteFramework.gml で、
mod/textures/
になってた部分が、現バージョン(0.52.7)では何故か
mod/legacytextures/
になってる。
descriptionやドキュメント等の更新もないし、意図も不明。
とりあえず、
mod/textures/ に置かれる画像を、mod/legacytextures/ に置き直せば動くことまでは確認した。
>> 返信元
他所で落した別のものは0.50.3で動作確認済みとのことと、7月ごろの書き込みでも最終的には動作しているようなので
おまかんかもしれません。原因の決めつけ、連投失礼しました!
同じ症状の人いるのわかってちょっと収穫。
MO2、Vortex、直接導入、どれでやっても同じエラーが出ます。差し替えデータはこのページで落としたきりたんと、あかねちゃんと、他所で落した別のものの3種です。
GMLとCSFは正常に動作しているようで、ログファイル?にまとめられたスプライトの画像もあります。
画像指定のテキストファイルの指定を適当な番号に書き換えるとキャラ画像が家具などになる以外は普通にゲームが動くので、画像指定の辺りがあやしいかんじです。
使用したものはすべて最新版です。
>> 返信元
続き
単純にこちらの用意したデータが悪いか、そもそも初めの手動で試みて失敗したのが悪かったのかあるいは両方かと思い、クリーンインストール後こちらのページにあったキリタンのデータや他で配布されているデータを用いてVortexで試みましたが、やはり同じエラーが出てクラッシュしました。
単純に現バージョンでは不可能なのか、それとも自分のやり方が悪いのかもしわかる方がいらしたら教えて頂けると大変ありがたいです。長文失礼しました。
こちらの情報を参考に現在のver:0.52.07にて差し替えを試みましたが上手くいきませんでした。
初めは手動でGMLファイルをダウンロードして差し替えに失敗したので再度Vortex上でやってみましたが、GMLとゲーム自体の起動までは成功したもののゲーム開始と同時にクラッシュ。全く知識がないのでなんとも言えませんが、キャラクターの配置に失敗しているようなエラーコードが出力されました。
>> 返信元
お役に立てて良かったです
自分の時は確かiniファイル自体が存在していなかったので、Configuration Fileのダウンロードだけで済みました
GMLoaderを入れたのが少し前のバージョンの時だったので多少ファイル構成が違ったのかも
>> 返信元
続きです
「GMLoader - Configuration File」をDLしてVortexに入れましたが、これでも機能せず
ゲームフォルダ内のGMLoader関連のファイルを見たら同名の「GMLoader.ini」があったので、まさかと思い消して手動でコピーしたら動きました!
本当にありがとうございました。助かりました!
>> 返信元
アドバイス感謝します。それでした!
正確には最新のLoader本体内に入っていた、もしくはVortex経由でModを入れた段階で生成された、このどちらかで
「GMLoader - Configuration File」である「GMLoader.ini」というファイルが出来ていて、
しかしエラー吐かない為のダミーファイルなのか、エラー出ず機能だけしないという現状でした
>> 返信元
参考になるかはわからないけど
自分もGMLが起動しなくて「GMLの設定ファイルがない」みたいな内容のエラー文が出てました
ネットで適当に調べたらGMLの本体とは別に設定ファイルもダウンロードしないといけないっぽい
で、GMLのページ内を探したら「GMLoader - Configuration File」というのがあったので、ダウンロードしてVortexで有効にしたらGMLが無事に起動できました
ファイルのDL場所は、GMLのページ開いてちょっと下のFILESって所の先にダウンロードリンクがあります
もし同じようなエラーで起動失敗していたら試してみてください
出来ねぇ……
Vortexも最新、GMLもCustomも最新、GMLファイルと画像も自分で作ったのがよくないのかと、両方ここのZipの使ってみても、それでも出来ないってどういう事?
ここの「ファイル配置」の説明で(ゲームフォルダ\mod\code)と書いてあるけど、zip内のフォルダだと(mods)になってるから両方やってみたけどそれも違う
何がダメなんだ
>> 返信元
教えてくれてありがとう
もう一度色々確かめてみます
NG表示方式
NGID一覧