A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | ・最初にやること | |||||||||||||||||||||||||
2 | ・tools_moddingフォルダの中身をコピー | |||||||||||||||||||||||||
3 | C:\Program Files (x86)\Steam\steamapps\common\Noita\tools_modding | |||||||||||||||||||||||||
4 | の中身を全コピーして、 | |||||||||||||||||||||||||
5 | ||||||||||||||||||||||||||
6 | C:\Program Files (x86)\Steam\steamapps\common\Noita | |||||||||||||||||||||||||
7 | にペーストする。 | |||||||||||||||||||||||||
8 | ||||||||||||||||||||||||||
9 | ・コマンドプロンプトなどを起動して、 | |||||||||||||||||||||||||
10 | cd C:\Program Files (x86)\Steam\steamapps\common\Noita | カレント移動 | ||||||||||||||||||||||||
11 | data_wak_unpack.bat | バッチ実行 | ||||||||||||||||||||||||
12 | ||||||||||||||||||||||||||
13 | すると以下のディレクトリにバニラのNoitaのゲームデータが出力される。 | |||||||||||||||||||||||||
14 | C:\Users\<ユーザ名>\AppData\LocalLow\Nolla_Games_Noita\data | |||||||||||||||||||||||||
15 | このデータをベースに改変したり、上書きしたり、準ずるデータを追加したりするのがMODの基本である。 | |||||||||||||||||||||||||
16 | スペルのIDやエンティティのIDなどを確認するにもこのゲームデータを見て雰囲気で察していく必要があるので、とりあえずやっとこう。 | |||||||||||||||||||||||||
17 | VSCodeなどのエディタでこのフォルダを参照すると色付けしてくれたり、検索しやすくてよい。 | |||||||||||||||||||||||||
18 | ・最小MODファイル構成 | |||||||||||||||||||||||||
19 | ・mod.xml | modの名前と説明を記載 | ||||||||||||||||||||||||
20 | ・init.lua | MODを読み込んで最初に実行されるスクリプトファイル。 | ||||||||||||||||||||||||
21 | ||||||||||||||||||||||||||
22 | ・超簡単MODを作ってみる。 初期位置にブラックホールのスペルを3つ配置するだけ。 | |||||||||||||||||||||||||
23 | ||||||||||||||||||||||||||
24 | init.lua | 最初に動くスクリプトファイル。 | ||||||||||||||||||||||||
25 | function OnPlayerSpawned( player_entity ) | OnPlayerSpawnedイベントハンドラを登録。プレイヤーがスポーンした瞬間動く。引数はプレイヤーキャラのポインタ? | ゲームを再開したときも動くので、本来はゲーム新規開始時のみ実行するような条件分岐が必要。 | |||||||||||||||||||||||
26 | local x, y = EntityGetTransform( player_entity ) | EntityGetTransformでプレイヤーの座標のxyを取得 | ||||||||||||||||||||||||
27 | CreateItemActionEntity("BLACK_HOLE", x, y) | CreateItemActionEntityにID, 座標X, 座標Yを指定することでキャラの位置にスペルが出現する。 | ||||||||||||||||||||||||
28 | CreateItemActionEntity("BLACK_HOLE", x+10, y) | IDは「gun_actions.lua」に定義されているIDを設定。 | C:\Users\<ユーザ名>\AppData\LocalLow\Nolla_Games_Noita\data\scripts\gun\gun_actions.lua | |||||||||||||||||||||||
29 | CreateItemActionEntity("BLACK_HOLE", x+20, y) | |||||||||||||||||||||||||
30 | end | |||||||||||||||||||||||||
31 | ||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||
33 | mod.xml | このファイルは簡単。 | ||||||||||||||||||||||||
34 | <Mod | |||||||||||||||||||||||||
35 | name="TEST mod" | MODの表示名 | ||||||||||||||||||||||||
36 | description="mod no setsumei" | MODの説明文 | ||||||||||||||||||||||||
37 | request_no_api_restrictions="0" | 未調査 | ||||||||||||||||||||||||
38 | > | </Mod> | ||||||||||||||||||||||||
39 | ||||||||||||||||||||||||||
40 | ・超簡単MODその2 初期位置に強い杖を配置するだけ。 | |||||||||||||||||||||||||
41 | init.lua | |||||||||||||||||||||||||
42 | function OnPlayerSpawned( player_entity ) | 青色の部分はゲーム再開時にものを生成しないようにする制御。 | ||||||||||||||||||||||||
43 | local is_initialized = GlobalsGetValue( "TEST_MOD_TRYING_TO_MODIFY_PLAYER_DATA_ONLY_ONCE" ) | ←自由に設定できる変数を読み込む。この変数はセーブデータに保存される。(このMOD専用の適当な名前です) | ||||||||||||||||||||||||
44 | if( is_initialized == "yes" ) then | ←yesが入ってたら後続処理やらず即終了。(つまりゲーム開始時1回だけ後続の処理を実行するという意味になる。) | ||||||||||||||||||||||||
45 | return | |||||||||||||||||||||||||
46 | end | |||||||||||||||||||||||||
47 | GlobalsSetValue( "TEST_MOD_TRYING_TO_MODIFY_PLAYER_DATA_ONLY_ONCE", "yes" ) | ←変数にyesをセット。第一引数は自由に設定可能な変数名。 | ||||||||||||||||||||||||
48 | ||||||||||||||||||||||||||
49 | local x, y = EntityGetTransform( player_entity ) | |||||||||||||||||||||||||
50 | EntityLoad("data/entities/items/wand_level_10.xml" , x-30, y) | C:\Users\<ユーザ名>\AppData\LocalLow\Nolla_Games_Noita\data\entities | ||||||||||||||||||||||||
51 | EntityLoad("data/entities/items/wand_level_10.xml" , x+30, y) | にあるxmlを読ませることでエンティティ(要素)をスポーンさせることができる。 | ||||||||||||||||||||||||
52 | end | EntityLoadの戻り値はエンティティID。 | ||||||||||||||||||||||||
53 | エンティティを消すときに使える。 | |||||||||||||||||||||||||
54 | ||||||||||||||||||||||||||
55 | ||||||||||||||||||||||||||
56 | ||||||||||||||||||||||||||
57 | ・何もしない表示するだけのエンティティを新規で作る | banner.xmlを参考に作成。ゲームデータのbanner.xmlのファイル構造を真似してmodのdataフォルダにファイルを置いていくと同じ性質のものを作ることができる。 | ||||||||||||||||||||||||
58 | mod構造 | |||||||||||||||||||||||||
59 | test | |||||||||||||||||||||||||
60 | ├ | init.lua | ←EntityLoad("data/entities/props/test.xml" , x+30, y) を追記して黄色のtest.xmlを読み込ませる。 | |||||||||||||||||||||||
61 | ├ | mod.xml | ||||||||||||||||||||||||
62 | └ | data | ||||||||||||||||||||||||
63 | └ | entities | ||||||||||||||||||||||||
64 | ├ | props | ||||||||||||||||||||||||
65 | | | └ | test.xml | ←このファイルをEntityLoad関数で指定する。data/entities/props/test.xml | ||||||||||||||||||||||
66 | | | |||||||||||||||||||||||||
67 | └ | props_gfx | ←gfxはグラフィクスの略と考えられる。 | |||||||||||||||||||||||
68 | ├ | test.png | ←表示したい画像素材 | 透過pngファイル。 | ||||||||||||||||||||||
69 | └ | test.xml | ←このファイルは↑のtest.xmlの中で参照する。 | |||||||||||||||||||||||
70 | ||||||||||||||||||||||||||
71 | ||||||||||||||||||||||||||
72 | props/test.xml | |||||||||||||||||||||||||
73 | <Entity tags="prop" > | エンティティタグがルート。Tagsは調査中 | ||||||||||||||||||||||||
74 | <VelocityComponent /> | エンティティの中に複数のコンポーネントタグを書いて性質を決める。 | ||||||||||||||||||||||||
75 | <SimplePhysicsComponent/> | コンポーネントについてはテキストファイルにリファレンスがあるのでどんなのがあるかまでは分かる。使い方とか意味は調査しないとわからん。 | ||||||||||||||||||||||||
76 | <SpriteComponent | C:\Program Files (x86)\Steam\steamapps\common\Noita\tools_modding\component_documentation.txt | ||||||||||||||||||||||||
77 | z_index="1" | |||||||||||||||||||||||||
78 | image_file="data/entities/props_gfx/test.xml" | スプライトコンポーネントで画像表示。image_file属性に画像の表示方法を書いたXMLへの参照を指定。 | ||||||||||||||||||||||||
79 | offset_x="0" | |||||||||||||||||||||||||
80 | offset_y="0" > | |||||||||||||||||||||||||
81 | </SpriteComponent> | |||||||||||||||||||||||||
82 | </Entity> | |||||||||||||||||||||||||
83 | ||||||||||||||||||||||||||
84 | props_gfx/test.xml | |||||||||||||||||||||||||
85 | <Sprite | |||||||||||||||||||||||||
86 | filename="data/entities/props_gfx/test.png" | ←参照する画像ファイルのパス | ||||||||||||||||||||||||
87 | offset_x="12" | |||||||||||||||||||||||||
88 | offset_y="30" | |||||||||||||||||||||||||
89 | default_animation="stand" > | |||||||||||||||||||||||||
90 | ||||||||||||||||||||||||||
91 | <!-- stand --> | |||||||||||||||||||||||||
92 | <RectAnimation | |||||||||||||||||||||||||
93 | name="stand" | |||||||||||||||||||||||||
94 | pos_x="0" | |||||||||||||||||||||||||
95 | pos_y="0" | |||||||||||||||||||||||||
96 | frame_count="7" | 7枚のアニメ | ||||||||||||||||||||||||
97 | frame_width="32" | 1フレームのサイズ横 | ||||||||||||||||||||||||
98 | frame_height="32" | 1フレームのサイズ縦 | ||||||||||||||||||||||||
99 | frame_wait="0.03" | アニメーションの1フレームの時間 | ||||||||||||||||||||||||
100 | frames_per_row="7" | アニメは横方向に読まれていく。何フレーム目で縦方向に進むか。 |