ABCDEFGHIJKLMNOPQRSTUVWXYZ
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"
アニメは横方向に読まれていく。何フレーム目で縦方向に進むか。