Snacktorioのカスタムレベルは、Steam Workshopから追加レベルを導入して遊ぶだけでなく、Tiledを使って自作し、レベル用MODとして共有できる要素です。
通常レベルの延長として楽しめる一方で、Custom Levelsメニュー、Moddingメニュー、レベル用MOD、Steam Workshop共有など、最初に分けて理解したい導線がいくつかあります。
この記事では、カスタムレベルで遊ぶ手順、通常MODとの違い、作成に必要なツール、Tiledでの編集、レベル登録、本番テスト、Steam Workshopへの共有までをまとめます。
・カスタムレベルを導入して遊ぶ基本手順
・通常MODとカスタムレベルの違い
・Tiledを使ったレベル作成の流れ
・Steam Workshopで共有するための準備
目次をチェックして目的の情報へ飛んで下さい。
時間のない方は本文の下の方に簡潔な「まとめ情報」もあります。
Snacktorioのカスタムレベルの遊び方と共有方法
・最初に見るべき全体の流れ
・Steam Workshopで遊ぶ手順
・手動インストールが必要な場面
・通常MODとの違い
・カスタムレベルで使える内容
・遊ぶ前に注意したいセーブ管理
・サンプルレベルの特徴と使い分け
この章では、カスタムレベルで遊ぶ流れ、通常MODとの違い、共有時に迷いやすい点を順番に見ていきます。
最初に見るべき全体の流れ
Snacktorioのカスタムレベルは、通常のレベル攻略とは別に、プレイヤーが作った追加レベルを遊んだり、自分で作ったレベルを共有したりできる仕組みです。
食品製造ラインを作る基本部分は通常プレイとつながっていますが、読み込み先や有効化する場所が通常のセーブ進行とは分かれています。
そのため、最初に見るべきなのは「遊ぶだけなのか」「作るのか」「共有するのか」の違いです。
遊ぶだけなら、基本の流れはかなり短くなります。
Steam Workshopでレベルを探し、Subscribeを押し、ゲーム内のCustom Levelsメニューで有効化し、Play Levelsから始めます。
1つ以上のカスタムレベルを有効化すると、通常進行とは別の特別なワールドと特別なスロットで読み込まれます。
通常レベルと同じように選択、プレイ、継続できますが、通常の本編進行をそのまま進める導線とは別物として見ると迷いにくくなります。
作る場合は、Tiledでレベルファイルを編集し、ゲーム内でプレビューし、最後にレベル用MODとして登録する流れになります。
Tiledで地形、パイプ、流体、オブジェクトなどを配置し、.luaとして出力します。
その後、config.jsonやmod.luaを用意し、mod.registerでレベル情報を登録して、Custom Levelsメニューから本番テストします。
見た目だけを試す段階と、注文や会話まで含めて遊べる形にする段階が分かれている点が重要です。
共有する場合は、完成したレベルMODをSteam Workshopへ上げる流れになります。
Steam Workshop Legal Agreementへの同意、Modomaticの準備、Steamへのログイン、Workshopエントリーの作成、Upload Modでのフォルダ選択、Workshopページ側での説明や画像の調整、visibilityをActiveにする作業が必要です。
カスタムレベルは「レベルファイルだけを置けば終わり」ではなく、ゲーム内に表示される情報、使える機械、進行設定、会話設定まで含めたレベル用MODとして整える対象です。
Steam Workshopで遊ぶ手順
Steam版で他の人が作ったカスタムレベルを遊ぶなら、Steam Workshopを使うのが基本です。
Workshop上では、レベル系のアイテムと通常MOD系のアイテムが並んでいます。
探すときは、タイトルに[LEVEL]が付いたものを優先して見ると、カスタムレベルとして扱う対象を見分けやすくなります。
代表例として、Not The Bees!、Undefined Behaviour、I REALLY Know What I’m Doing、Example Custom Levelなどがあります。
遊ぶ手順は次の流れです。
・Steam Workshopで遊びたいアイテムを開く
・Subscribeを押して購読する
・Snacktorioを起動する
・Custom Levelsメニューを開く
・遊びたいレベルを有効化する
・Play Levelsを選ぶ
・特別なワールドとスロットでレベルを開始する
購読しただけでは、すぐに通常プレイへ混ざるわけではありません。
カスタムレベルはCustom Levelsメニューに表示され、そこから有効化して使います。
この流れを飛ばすと、Workshopでは購読済みなのにゲーム内で遊べないように見えることがあります。
通常MODの場合はModdingメニュー側に表示されるため、どちらのメニューを見るべきかを先に切り分けるのが大事です。
カスタムレベルは、作成者が用意した内容に応じて遊び方が変わります。
通常プレイで使えるツールやアップグレードを自分が解放していても、そのカスタムレベル内で使えるとは限りません。
カスタムレベル側では、作成者が使えるツールや機械を設定できます。
本編で慣れた方法がそのまま通じないこともあるため、最初は通常レベルの延長ではなく、専用の課題として遊ぶと違いを受け入れやすくなります。
手動インストールが必要な場面
Steam Workshopを使わない共有では、手動インストールの出番があります。
たとえば、Workshopへ上げない友人間共有や、Steam版以外の環境でレベル用MODを扱う場合です。
この場合はWorkshopのSubscribeではなく、ローカルのMODフォルダへファイルを置く流れになります。
手動インストールでは、まずゲーム内のModdingメニューからMods Folderボタンを使い、ローカルMODフォルダを開きます。
受け取ったzipファイルをそのフォルダに入れて展開し、my_friends_modのように分かりやすいフォルダ名を付けます。
その後、ゲームを再起動します。
有効なMODやレベル用MODであれば、メニューに表示され、そこから有効化できます。
この導線で迷いやすいのは、ファイルを置く場所と再起動の必要性です。
ゲーム内から開けるローカルMODフォルダを使うのが重要で、ゲーム本体のコード側にあるフォルダを直接触る流れとは分けて考えます。
また、フォルダへ入れただけで即時反映されるとは限らないため、再起動してからメニューを見ます。
手動でファイルを扱う場合は、相手や配布元にも注意が必要です。
知らない相手から受け取ったファイルを不用意にダウンロード、展開、実行しないことが大切です。
Steam Workshop経由なら購読と解除の流れが分かりやすい一方、手動インストールはファイルを直接扱うため、管理の責任も大きくなります。
友人間で共有する場合でも、どのフォルダを入れるのか、mod.luaやconfig.jsonが含まれているのかを見てから扱うと失敗を減らせます。
通常MODとの違い
カスタムレベルは、通常MODとまったく別の仕組みではありません。
レベル用MODとして作られ、config.jsonやmod.luaを使います。
違いが出るのは、config.jsonのtype、表示されるメニュー、mod.registerでレベル情報を登録する点です。
通常MODを作る知識があるほど、カスタムレベルの構造も理解しやすくなります。
config.jsonでは、主にname、author、icon、typeを設定します。
nameは表示名、authorは作者名、iconはアイコンの相対パス、typeは種類を決める項目です。
typeがmodならModdingメニューに表示されます。
typeがlevelならCustom Levelsメニューに表示され、登録済みレベルを持つことが期待されます。
違いを整理すると次のようになります。
・通常MOD:typeをmodにし、Moddingメニューに表示される
・カスタムレベル:typeをlevelにし、Custom Levelsメニューに表示される
・通常MOD:イベントフックやコード変更が中心になる
・カスタムレベル:レベルファイル、進行設定、会話、使える機械などの登録が中心になる
・通常MOD:ゲーム全体に影響する処理を書きやすい
・カスタムレベル:対象レベル内でどう動くかを意識する必要がある
mod.luaはどちらでも重要です。
通常MODでは、load、draw、stepなどのイベントフックを使ってゲームのサイクルに処理を差し込みます。
カスタムレベルでも同じくイベントフックを使えますが、レベル登録ではmod.registerが重要になります。
登録内容には、レベル名、オーバーワールド表示、進行設定、会話、使える機械などが関わります。
特に独自ロジックを入れるカスタムレベルでは、通常MODとの境界が近くなります。
Example Custom Levelでは、空中足場型のレベルでプレイヤーが落下しすぎた場合にリスポーンさせるため、stepフックを使っています。
このような処理を書く場合は、現在のレベルが自分のレベルかをgame.g.levelで見る必要があります。
そうしないと、別のレベルや他のMODにまで処理が影響する可能性があります。
カスタムレベルで使える内容
カスタムレベルで扱える内容は、単なる地形だけではありません。
Tiledで配置するタイル、各レイヤー、オブジェクト、流体、パイプ、ワイヤー、機械、会話、進行設定、使用可能な機械などが関わります。
作成者がどこまで手を入れるかによって、通常レベルに近いものから、独自要素を含む高難度のチャレンジまで幅が出ます。
レベル側で特に重要になるのは、Tiledのレイヤーです。
代表的なレイヤーには次のような役割があります。
・Blackout:使わない領域を黒く覆う
・Signs:看板を置く
・Tubes:液体パイプを置く
・Pipes:アイテムパイプを置く
・Wires:ワイヤーを置く
・Objects:ビースト、植物、スポナー、機械ブロックなどを置く
・Void:voidのガスブロックを置く
・Blocks:標準ブロックを置く
・Fluid:液体と液体voidを置く
・Background:背景ブロックを置く
ここで大事なのは、正しいものを正しいレイヤーに置くことです。
たとえば、Objectsレイヤーは特殊オブジェクト用で、ビースト、植物、スポナー、機械ブロックなどを置く場所です。
Signsは看板用で、他の多くのレイヤーとは使うタイルセットが異なります。
間違ったレイヤーに配置すると、ゲーム内で意図通り読み込まれなかったり、クラッシュの原因になったりします。
Objectsレイヤーでは、タイルがゲーム内オブジェクトに変換されます。
公式ガイドで示されている最初の16タイルには、Pinenut Tree、Rezin Tree、Imp Spawner、Beast、Platform、Scaffold、Ladder、Tomato Plant、Bayleaf Plant、Imp Shroom、Pepper、Machine Block、Item Spawnなどがあります。
Rezin TreeをObjectsレイヤーに置くと、読み込み時にRezin treeが生成されます。
Machine Blockはよく使う対象ですが、単体では何も読み込まれません。
Custom Propertiesへstring型のoidを追加し、値をMinerにすると、その位置へminerが自動配置されます。
カスタムレベルでは、さらにmod.registerで使える機械や進行を設定します。
machinesは、レベル内でプレイヤーが使う追加機械やアップグレード済み機械を決める項目です。
通常プレイでvoid upgradesを解放していても、作成者が許可していなければ、そのレベル内で使えるとは限りません。
このため、カスタムレベルの難しさは、地形だけでなく、何を使えるようにするかでも変わります。
遊ぶ前に注意したいセーブ管理
カスタムレベルやMODで遊ぶ前は、セーブの扱いを軽く見ないほうがよいです。
MODを使っても実績解除は妨げられません。
ただし、MODコンテンツが有効なセーブでMODを外すと、予期しない結果につながる可能性があります。
特に、追加要素を含むMODやレベルを試すときは、普段使うセーブと実験用の扱いを分ける意識が役立ちます。
MODを外す場合は、Moddingメニューで無効化し、ゲームを終了して再起動します。
カスタムレベルも通常進行とは別の特別なワールドとスロットで読み込まれますが、MODの有効化状態や読み込み状態はゲームの挙動に関わります。
「遊ばなくなったからファイルを削除する」より先に、ゲーム内メニューから無効化する流れを挟むと管理しやすくなります。
Workshopのカスタムレベルで問題が起きたときは、Workshopアイテムページから作成者へ報告する導線があります。
クラッシュメッセージが出る場合は、その内容も伝えると状況が伝わりやすくなります。
自分の環境でどのレベルを有効にしていたか、通常MODも同時に入れていたか、どのタイミングで止まったかを整理すると、原因の切り分けにもつながります。
手動インストールの場合は、さらにファイル管理が重要です。
zipファイルをどこへ展開したか、フォルダ名をどう付けたか、同じMODを複数入れていないかを見ておきます。
Steam WorkshopのSubscribeと違って、ローカルフォルダに残ったファイルは自分で管理する必要があります。
遊ぶだけのつもりでも、手動共有では作成者向けのファイル構造に触れることになるため、ファイルの出どころと配置場所を意識しておくと安心です。
サンプルレベルの特徴と使い分け
カスタムレベルを理解するには、サンプルや公開例を見るのが早いです。
ただし、サンプルにも方向性があります。
既存レベルを難しくしたもの、独自コンテンツを追加したもの、ギミックや制限を重視したもの、独自ロジックを使うものでは、参考にすべき点が違います。
代表的な例は次の通りです。
・Example Custom Level:空中足場型のサンプルで、落下時のリスポーン処理にstepフックを使う例
・I REALLY Know What I’m Doing:ベースゲームのT-B1レベルテンプレートをコピーし、より難しくした例
・Undefined Behaviour:ボーナス風レベルを再現し、NPC wall panels、locked doors、restricted toolsetsを使う例
・Not The Bees!:カスタムブロック、アイテム、流体、機械、料理を追加する高度な例
・Example Function Mod:スペースバーでspringboard風ジャンプを追加する通常MODの例
遊ぶ側なら、まず[LEVEL]表記のあるものから見ます。
通常MODの例であるExample Function Modは、カスタムレベルそのものではありません。
一方で、カスタムレベルでもイベントフックを使えるため、作成側の参考としては役立ちます。
「レベルとして遊びたい」のか「コードの例を見たい」のかで、見るべきアイテムは変わります。
作る側なら、最初はI REALLY Know What I’m Doingのような既存テンプレート改造型が参考にしやすいです。
既存レベルをベースにして難度を上げる方向なら、独自素材や独自料理まで追加するより始めやすくなります。
ギミックや制限を使いたい場合はUndefined Behaviour、独自ブロックや機械まで踏み込みたい場合はNot The Bees!が参考例になります。
Not The Bees!では、hive、apiary、killer bees、honeyなどを使い、Doom BallsをひねったFlaming Ballsを作る例として説明されています。
難しいチャレンジを作りたい場合も、単に地形を複雑にするだけではありません。
使えるツールを制限する、ロック扉やNPC壁パネルを使う、既存レベルを高難度化する、独自機械や独自食材で注文の考え方を変えるなど、複数の方向があります。
遊ぶ側は「どの要素で難しくなっているのか」を見ると、自分に合うレベルを選びやすくなります。
作る側は、最初から全部を入れようとせず、既存改造、ギミック重視、独自コンテンツ追加のどれを目指すかを決めると作業がまとまりやすくなります。
Snacktorioのカスタムレベルの作り方
・作成に必要なツールと知識
・Tiledで始めるレベル編集
・レイヤーごとの役割
・プレビューで確認できる範囲
・レベルMODとして登録する方法
・本番テストで確認する内容
・Steam Workshopへ共有する流れ
・作成時につまずきやすい点
ここでは、Tiledでの編集からレベル用MOD化、Steam Workshop共有までの作成手順を扱います。
作成に必要なツールと知識
カスタムレベル作成には、ゲーム本体に加えて、Tiled、コードエディター、LuaとLÖVEの知識が関わります。
Tiledはレベル編集に使う外部ツールで、Snacktorioのレベル設計にも使われています。
コードエディターは、config.jsonやmod.luaを編集するために使います。
公式ガイドではVSCode、Lua、LÖVEが作成環境として示されています。
本作はLÖVE上に作られており、Luaで書かれたゲーム制作フレームワークを使っています。
MODやカスタムレベルでは、厳密に整えられた専用APIだけを触るというより、必要なゲームスクリプトを呼び出したり、既存クラスを変更したりする作りになっています。
そのため、完全にノーコードで作るというより、地形編集と軽いコード編集を組み合わせるものとして考えると実態に近くなります。
作成で触るファイルには、主に次のようなものがあります。
・config.json:ゲーム内表示名、作者名、アイコン、種類を設定する
・icon.png:ゲーム内で表示されるアイコン
・mod.lua:レベル登録や追加処理を書く入口
・.tmx:Tiledで編集するレベルファイル
・.lua:Tiledから出力し、ゲーム側で読み込むレベルファイル
通常MOD作成では、GitHubのMod Templateを使う流れがあります。
カスタムレベルでは、Level Templateを使います。
Level TemplateはMod Templateに似ていますが、config.jsonのtypeがlevelになっている点と、mod.luaのloadフックでmod.registerを呼ぶ点が重要です。
ここを通常MODのままにしてしまうと、Custom Levelsメニューに出すべきものが期待通り表示されません。
Tiledで始めるレベル編集
Tiledをインストールしたら、まずゲームの保存場所を開きます。
ゲーム内のStart MenuからSave Folderをクリックすると、保存場所へ移動できます。
その中のlevelsフォルダに、ゲームで使われるレベルテンプレートがあります。
最初は空白テンプレートをコピーして始めるのが分かりやすいです。
基本の開始手順は次の通りです。
・Tiledをインストールする
・ゲーム内のStart MenuからSave Folderを開く
・保存場所内のlevelsフォルダを開く
・level_blank_normal.tmxをコピーする
・custom1.tmxのような名前に変更する
・変更したファイルをTiledで開く
・地形やオブジェクトを編集する
・Export Asで.luaとして出力する
注意したいのは、ゲームコード内にあるlevelsフォルダを直接編集しないことです。
ゲームコード内のlevelsフォルダは起動時に保存場所へコピーされ、Steam同期で戻される可能性があります。
編集対象は、保存場所内のlevelsフォルダです。
似た名前のフォルダが複数出てくると迷いやすいので、保存場所から開いたフォルダで作業する流れを固定すると失敗が減ります。
Tiledでは、レイヤーを選び、タイルを選択し、stampブラシで配置します。
広い範囲を置くときはfillツールやrectangleツールも使えます。
配置済みタイルを右クリックすると、そのタイルを選び直せます。
タイルセットの最初のタイルは空のタイルで、消しゴムのように使えます。
作り始めでは、細かい端の見た目よりも、先に全体の形を作るのが向いています。
ブロックは自動で端が整わないため、最後にエッジを仕上げる必要があります。
ワイヤー、アイテムパイプ、液体パイプはプレビュー読み込み時に自動的につながるため、接続見た目を最初から細かく作り込みすぎなくても進められます。
まずはレベルの広さ、移動経路、ビーストや機械の位置を見ながら、大枠を作るのが扱いやすい流れです。
レイヤーごとの役割
Tiledでの作業は、レイヤーを間違えないことが重要です。
空白テンプレートには、ゲーム内の異なる層に対応するレイヤーが用意されています。
正しいレイヤーに正しいものを置くことで、ゲーム内で意図した形に読み込まれます。
逆に、間違ったレイヤーに置くと、見た目だけでなく読み込みや挙動にも影響が出ます。
主要なレイヤーは次の通りです。
・Blackout:使わない範囲を黒く覆う
・Signs:看板を置く
・Tubes:液体パイプを置く
・Pipes:アイテムパイプを置く
・Wires:ワイヤーを置く
・Objects:特殊オブジェクトを置く
・Void:voidのガスブロックを置く
・Blocks:標準ブロックを置く
・Fluid:液体と液体voidを置く
・Background:背景ブロックを置く
Signs以外の多くのレイヤーでは、snacktorio-tilesetを使って描画します。
このタイルセットの最初の列はObjects用で、その後にブロック、背景、流体が並びます。
最後の3列はゲームが自動適用する装飾のため、基本的には無視して進めます。
Signsはsnacktorio-signsタイルセットから看板を置くため、他のレイヤーと使うタイルセットが違います。
Objectsレイヤーは特に間違いやすい場所です。
ここには、ビースト、植物、スポナー、機械ブロックなど、ゲーム内オブジェクトへ変換されるタイルを置きます。
公式ガイドで示されているObjects最初の16タイルには、Pinenut Tree、Rezin Tree、Imp Spawner、Beast、Platform、Scaffold、Ladder、Tomato Plant、Bayleaf Plant、Imp Shroom、Pepper、Machine Block、Item Spawnなどがあります。
これらは単なる背景ではなく、読み込み時にゲーム内の対象へ変換されるものです。
Machine Blockを置く場合は、配置だけでは足りません。
Objectsレイヤーに置いたあと、Custom Propertiesにstring型のoidを追加します。
値をMinerにすると、その位置へminerが自動配置されます。
Machine IDの一覧はゲーム内のdictionary.luaで見られます。
機械には他にも多くのプロパティがあるため、既存レベルやカスタムレベルの例を見て真似る流れが現実的です。
Fluidレイヤーも、通常の地形感覚とは少し違います。
流体には重力がないため、好きな形に配置できます。
液体voidはタイルセット上では明るい赤に見えますが、ゲーム内ではvoid効果として表示されます。
現実の水のように落ちる前提で形を作るより、ゲーム内の見え方をプレビューで見ながら調整するのが向いています。
プレビューで確認できる範囲
Tiledで編集したレベルは、ゲーム内でプレビューできます。
Export Asから保存場所内のlevelsフォルダへ出力し、custom1.luaのような単純な名前で保存します。
その後、ゲームのホーム画面でCTRL+iを押してDEV MODEを切り替えます。
DEV MODEで/loadlevel custom1と入力してEnterを押すと、少し待ったあとにレベルがプレビューとして読み込まれます。
プレビューで便利なのは、配置や見た目を何度も試せることです。
新しいブロックや背景を置き、ゲーム内で読み込んで見え方を見ます。
ワイヤー、アイテムパイプ、液体パイプは読み込み時に自動接続されるため、接続状態も見ながら調整できます。
ブロックのエッジは自動で整わないため、プレビューを見て違和感のある端を直していきます。
ただし、/loadlevelのプレビューは本番プレイの代わりではありません。
ボットと会話したり、注文を正しく受けたりする用途には向きません。
レイアウトやデザインを確認する段階として使うものです。
会話、注文、進行、追加コードまで含めた動作は、レベルMODとして登録したあと、Custom Levelsメニューから実際に起動して見ます。
プレビュー中にクラッシュする場合は、配置や設定を見直します。
起こりやすい原因は、間違ったレイヤーに配置していること、オブジェクト設定を誤っていること、Machine Blockなどに必要なプロパティが足りないことです。
見た目の調整と動作の確認を同じ段階で全部済ませようとすると原因が分かりにくくなります。
まずは地形と配置をプレビューで整え、そのあとレベルMOD化して進行や注文を確認する二段階に分けると、問題の場所を追いやすくなります。
レベルMODとして登録する方法
Tiledで作ったレベルを本格的に遊べる形にするには、レベル用MODとして登録します。
この段階では、.luaとして出力したレベルファイルだけでなく、config.json、アイコン、mod.luaを用意します。
通常MODと似た構造ですが、カスタムレベルとして表示するためにtypeをlevelにする必要があります。
レベル用テンプレートを使う場合、作業の中心は次の項目です。
・config.jsonでレベルタイトルと作者名を設定する
・typeがlevelになっていることを見る
・アイコンを必要に応じて変更する
・Tiledから出力した.luaファイルをレベルMODフォルダへ入れる
・mod.luaのloadフックでmod.registerを呼ぶ
・mod.registerにレベル情報を設定する
mod.registerでは、レベルの表示や進行に関わる情報を登録します。
登録項目には、name、beasts、stars、progmap、dialogue、machinesがあります。
nameはゲーム内に表示されるレベル名です。
beastsはオーバーワールド上に表示するビーストアイコン、starsはスターアイコンの設定です。
progmapは開始順、多ビースト処理、終了条件をゲームに知らせる進行設定です。
dialogueはボットの導入会話、注文会話、完了会話を設定します。
machinesは、レベル内でプレイヤーが使う追加機械やアップグレード済み機械を設定します。
ここでの考え方は、レベルを単なるマップではなく、遊べる課題として完成させることです。
見た目の地形だけでは、ゲーム内で何を注文させるのか、どの順番で進めるのか、どの機械を使えるのかが決まりません。
特に複数のビーストや順序があるレベルでは、progmapが重要になります。
プレイヤーにどんな流れで考えさせるのかを、地形と登録情報の両方で整えます。
独自ロジックを入れる場合は、カスタムレベルでも通常MODのイベントフックを使えます。
ただし、その処理が自分のレベル内だけで動くように、現在のレベルを見て分岐する必要があります。
落下時のリスポーンのように、地形の特殊性を補う処理は便利ですが、対象レベルを見ないまま書くと別の場面にも影響します。
レベル登録と追加コードはセットで考え、必要な処理だけを対象レベルに閉じ込めるのが大事です。
本番テストで確認する内容
Workshopへ共有する前に、Custom Levelsメニューから本番テストをします。
ローカルMODフォルダに新しいフォルダを作り、レベルMODの内容を入れます。
ローカルMODフォルダは、levelsフォルダと同じ保存場所の中にあります。
正しく追加できると、ゲーム内のCustom Levelsメニューにレベルが表示されます。
そのレベルを有効化し、Play Levelsから起動します。
本番テストでは、/loadlevelプレビューでは見られない部分を重点的に見ます。
プレビューでは主にレイアウトやデザインを確認しますが、Custom Levelsメニューからの起動では、追加コード、注文、会話、進行設定まで動きます。
ボットの導入会話、注文会話、完了会話が自然につながるか、machinesで想定した機械が使えるか、progmapで想定した進行になるかを見ます。
本番テストで見るべき内容は次の通りです。
・Custom Levelsメニューに表示されるか
・アイコンやレベル名が分かりやすいか
・Play Levelsから起動できるか
・注文や会話が正しく流れるか
・使える機械やツールが意図通りか
・複数ビーストや進行順が崩れていないか
・追加コードが対象レベル内でだけ動いているか
・落下や特殊地形などで詰まらないか
・クリアまで遊べるか
テストでは、作った本人が意図を知っていることも意識します。
自分では分かる配置でも、初めて遊ぶ人には目的が伝わりにくいことがあります。
Signs、会話、初期配置、使える機械の制限は、プレイヤーが何をすればよいかに直結します。
難しいチャレンジを作る場合でも、理不尽に見える原因が単なる説明不足になっていないかを見ます。
特に高度なカスタムレベルでは、独自要素と進行設定の両方を見ます。
Not The Bees!のようにカスタムブロック、アイテム、流体、機械、料理を追加する方向では、独自要素が注文や進行と噛み合っているかが重要です。
Undefined Behaviourのように制限ツールやロック扉を使う方向では、制限が面白さにつながるか、単に詰まりやすいだけになっていないかを見ます。
既存テンプレートを難しくする方向でも、元のレベルの流れを壊しすぎていないかが判断点になります。
Steam Workshopへ共有する流れ
完成したカスタムレベルをSteam Workshopへ共有するには、アップロード用の準備が必要です。
まずSteam Workshop Legal Agreementに同意します。
次に、Modomaticを使います。
ModomaticはSteamへMODをアップロードするための小さなアプリで、カスタムレベルの共有にも使います。
Steamを開いてログインした状態で、Modomaticを実行します。
共有の流れは次の通りです。
・Steam Workshop Legal Agreementに同意する
・ModomaticをOSに合わせて用意する
・Steamへログインした状態でModomaticを起動する
・Create NewでWorkshopエントリーを作成する
・View ItemリンクからSteam上のアイテムページを見る
・Upload Modでmod.luaを含むフォルダを選ぶ
・Workshopページ側で説明文、画像、タグ、公開範囲を整える
・自分のアイテムを購読してゲーム内で動作を見る
・準備ができたらvisibilityをActiveにする
ModomaticとSteam Workshopページでは担当が少し違います。
Modomaticは、実際のMODコードのアップロード、MODのタイトルやアイコン設定に使います。
Workshopページ側では、説明文、画像、タグ、公開範囲を編集します。
スクリーンショットはWorkshop上で直接追加できます。
どちらか一方だけで全部を完結させようとすると、どこを直すべきか迷いやすくなります。
Upload Modでは、mod.luaを含むフォルダを選びます。
MOD内容は同じフォルダ内にまとめておく必要があります。
カスタムレベルなら、出力したレベルファイル、config.json、icon.png、mod.luaなどを整理して入れます。
アイコンについては、ゲーム内用の17x17pxアイコンをWorkshop用にそのまま使うと非常に小さくなるため、Workshop向けには大きいものを用意します。
アップロードに成功すると、Workshopページにbuild sizeが表示されます。
その後、自分のアイテムを購読し、ゲーム内で動作を見ます。
公開前に自分で購読して遊ぶことで、Workshop経由で正しく届いているか、Custom Levelsメニューに出るか、Play Levelsから起動できるかを見られます。
最後にvisibilityをActiveにすると、他のプレイヤーから見えるようになります。
Modomaticは、Workshopアイテムの情報をローカルの.jsonファイルに保存します。
Edit Configボタンから内容を見られます。
各アイテム設定には、id、title、versionがあります。
idはWorkshopアイテムURLに表示されるID、titleはアイテム名、versionは未アップロードなら0、アップロード済みなら1です。
Steam Workshop側で名前変更や削除をしてもModomaticへ自動反映されないため、必要に応じて設定を合わせます。
作成時につまずきやすい点
カスタムレベル作成でつまずきやすい点は、いくつかの段階に分かれます。
Tiledでの配置、プレビュー、本番テスト、レベルMOD化、Workshop共有のどこで止まっているのかを分けると、原因を追いやすくなります。
全部を一度に直そうとすると、レイヤーの問題なのか、登録の問題なのか、共有設定の問題なのかが見えにくくなります。
Tiledで起こりやすい失敗は、間違ったレイヤーにタイルを置くことです。
Signs、Objects、Fluid、Blocksなどは役割が違います。
特にObjectsレイヤーは、ビーストや植物、スポナー、Machine Blockなどの特殊オブジェクトを置く場所です。
オブジェクトを別レイヤーに置いたり、Objects用のタイルを不適切な場所で使ったりすると、読み込み時に問題が起こりやすくなります。
Machine Blockも詰まりやすい対象です。
Machine Blockを置いただけでは何も読み込まれません。
Custom Propertiesにstring型のoidを追加し、必要な値を入れる必要があります。
Minerを指定すれば、その位置にminerが自動配置されます。
機械ごとの詳細なIDやプロパティは既存レベルや例を見ながら合わせるのが現実的です。
ファイルの場所もよくある落とし穴です。
ゲームコード内のlevelsフォルダを直接編集するのではなく、保存場所内のlevelsフォルダを使います。
ゲームコード内のファイルは起動時に保存場所へコピーされたり、Steam同期で戻されたりする可能性があります。
編集したはずなのに反映されない場合は、どのlevelsフォルダを触っているかを最初に見直します。
プレビューと本番テストの違いも重要です。
/loadlevelでは、レイアウトやデザインを素早く見られます。
一方で、ボットとの会話や注文を正しく確認する用途ではありません。
注文、会話、追加コード、進行設定は、レベル用MODとして登録し、Custom Levelsメニューから起動して見ます。
ここを混同すると、プレビューでは問題なさそうなのに実際に遊ぶと進まない、またはプレビューで見えない部分を直せない状態になります。
config.jsonのtypeも見落としやすい項目です。
Custom Levelsメニューへ出したいなら、typeはlevelです。
modのままだと、通常MODとしてModdingメニュー側に出る流れになります。
表示場所がおかしいときは、まずtypeを見ます。
mod.registerの設定不足も、完成度に直結します。
name、beasts、stars、progmap、dialogue、machinesは、表示、進行、会話、使える機械に関わります。
地形ができていても、進行設定や会話が整っていなければ、遊べるレベルとしては分かりにくくなります。
特に複数ビーストや複雑な注文を扱う場合は、progmapとdialogueを後回しにしすぎないほうが作業しやすくなります。
独自ロジックを書く場合は、対象レベルの判定を忘れないことも大切です。
stepフックなどは便利ですが、現在のレベルを見ずに処理を書くと、別のレベルにも影響する可能性があります。
落下時リスポーンのような処理は、その地形に必要だから入れるものです。
他のレベルで動くと不要な挙動になりやすいため、game.g.levelを見て対象を絞ります。
Workshop共有では、Steam Workshop Legal Agreementへの同意漏れ、Upload Modで選ぶフォルダの間違い、Workshopページ側の説明や画像の未設定がつまずきやすい点です。
mod.luaを含む正しいフォルダを選び、MOD内容を同じフォルダ内にまとめます。
アップロード後はbuild sizeを見て、自分のアイテムを購読し、ゲーム内で動作を見ます。
公開範囲をActiveにするのは、準備とテストが済んだあとです。
作成を進める順番としては、まず既存テンプレート改造から入ると迷いにくくなります。
I REALLY Know What I’m Doingのように既存レベルを難しくする方向なら、地形や進行の大枠をつかみやすいです。
次に、ギミックや制限を使う方向、独自コンテンツを追加する方向へ広げます。
最初からカスタムブロック、独自機械、独自料理まで一気に入れようとすると、レイヤー、登録、コード、テスト、共有のすべてで原因を切り分けにくくなります。
Snacktorioのカスタムレベルについてのまとめ
・カスタムレベルはCustom Levelsメニューから有効化する
・Steam WorkshopではSubscribe後にゲーム内で有効化する
・通常MODはModdingメニュー側に表示される
・レベル用MODはconfig.jsonのtypeをlevelにする
・作成にはTiledとコード編集の両方が関わる
・編集対象は保存場所内のlevelsフォルダにする
・Objectsレイヤーは特殊オブジェクト配置に使う
・Machine Blockはoid設定がないと機能しない
・プレビューは見た目確認向けで注文確認には向かない
・本番テストはCustom Levelsメニューから行う
・共有にはModomaticとSteam Workshopを使う
・公開前に自分で購読して動作確認する
・セーブ管理ではMODの無効化と再起動が重要
・サンプルは作りたい方向別に見ると選びやすい
