100% Orange Juice

100% Orange Juice

Not enough ratings
100おれ MODマニュアル
By Fumi and 1 collaborators
100%おれんじじゅ~すっ!用 MOD について解説した公式マニュアルです。
   
Award
Favorite
Favorited
Unfavorite
はじめに


100%おれんじじゅ~すっ!用 MOD の制作とインストールについて解説します。

制作については「MOD 制作」セクションをお読みください。

公開されている MOD はこちらでご覧いただけます。
https://steamproxy.net/app/282800/workshop/

質問や疑問点などは、このガイドのコメント欄へお書きください。
法的通知
このガイドで言及されたゲームリソースをファイル解凍ソフト等で解凍し利用することは、ゲーム「100%おれんじじゅ~すっ!」用の MOD を制作するという目的においてのみ認められます。それ以外の目的での利用は一切認められません。また、ゲームやキャラクターの品位、それらの著作権保持者の権利を傷つける意図での MOD 制作も認められません。法を遵守し、商標を尊重することは、全ての MOD 制作者が負う責任です。

Fruitbat Factory, Ltd. は、MOD 制作を目的としたゲームリソースの利用に関する制限を、今後さらに追加、または取り消す場合があります。その際は、Twitter、Discord、Steam などで通知する、または該当ゲームリソースが含まれるアーカイブファイルを暗号化します。

全ての MOD 制作者は、自身の MOD を公開する前に、必ずこのガイドの最新版を読み、その MOD が制限事項に沿ったものであることを確認する責任を負います。
制限事項
MOD に対応している要素は以下の通りです。
  • ユニット
  • カードイラスト
  • BGM
  • ボイス
  • 効果音

重要事項
MOD化に対応するファイルは、MOD化という目的のために暗号化されていないファイルのみです。
一部のボイスファイルは、カスタムボイスファイルと置き換えることができますが、そのボイスファイル自体に変更を加えたり、いかなる理由においても二次使用したりすることは禁止です。

ゲームにインストールされた MOD は、コンフィグ画面の「MOD」タブで確認できます。

現在のシステムバージョン
更新履歴
日付
内容
2021/09/30
「ペット1」セクションと「ペット2」セクションを追加
03.09.2021
「BGM」セクションの「イベント」に「渦イントロ」を追加
2021/07/06
2つの効果音を追加
2021/07/05
「孤独の車乗り」と「商人」を追加、BGM1曲を追加
2021/05/04
「ハレナ」と「クック」を追加
2021/03/24
「制限事項」セクションに重要事項を追加
2021/02/26
「ユニット ID」セクションに項目をバウンティハント関連の項目を追加
2021/02/24
マス、ホームマス、カスタム言語についての記述を追加
「斬子(さくらみこコラボ衣装)についての注意事項を追加
「BGM」セクションに新イベントを追加
「BGM 」セクションに新パラメーター「volume」を追加
2020/12/25
「クリス」と「きゅぴた」を追加
2020/11/08
「BGM」セクションにイベントを追加:「finalstage」トモモ地獄(キャンペーン Extra)で流れる曲
2020/10/23
「アーネル」と「メイニー」を追加、「BGM」セクションにイベントを追加
2020/10/06
「システムボイス ファイル名」セクションを更新
===============================
MOD 制作
MOD ファイルの保存場所

ゲームを開始すると、ゲームの EXE ファイルがあるフォルダに、mods フォルダが作成されます。
以下の手順で、EXE ファイルがあるフォルダを開くことができます。

① Steam ライブラリを開く
②「100% Orange Juice」を右クリック
③「プロパティ」
④「ローカルファイル」タブ
⑤「ローカルファイルを閲覧」

MOD ファイルは全て、この mods フォルダに保存してください。

---

MOD ファイルの準備

まず mods フォルダ内に新規フォルダを作成します。
このフォルダの中に必要なファイルを保存します。
フォルダ名はなるべくシンプルなものが望ましいです。

Steam ワークショップ対応に伴い、MOD 定義ファイルのフォーマットが変わりました。
今後は、新しい MOD 制作方法のみがサポートされます。
また、MOD を Steam ワークショップに投稿する際は、必ずこのガイドにある手順で行ってください。

以下は定義ファイルに記載するコードのサンプルです。

サンプルコード
{ "ModDefinition": { "name": "ソラ ソロ・デビュー ver.", "description": "史上最高にかわいいアイドルがデビュー!", "author": "Sora [Fruitbat Factory]", "system_version": 2, "changelog": "初投稿" }, "ModReplacements": { "textures": [ "units/cuties_00", "units/cuties_01", "units/cuties_02" ], "music": [ { "unit_id": "sorasp", "file": "music/grayhued", "loop_point": 796411 } ] } }

上記をメモ帳などのエディタに記載し、「mod.json」という名前で保存してください。
保存場所は、自身で作成した MOD フォルダの直下です。

以前の方法で定義ファイルを作成する場合は、後述の該当セクションをご覧ください。
ただし、以前の方法は非推奨ですので、その点はご留意ください。
MOD 定義
このセクションの内容は、以前の MOD 制作方法には非対応です。

パラメータ
データ型
内容
必須
name
string
MOD の名前です。ゲーム内の MOD リストと ワークショップのアイテムページに表示されます。
description
string
MOD の説明文です。ゲーム内の MOD リストと ワークショップのアイテムページに表示されます。
author
string
MOD の制作者名です。ゲーム内の MOD リストに表示されます。
system_version
int
このパラメータは必ず定義し、現在サポートされているシステムバージョンに対応している必要があります。また、MOD 定義の方法が変更された場合、MOD が正常に読み込まれるように、定義ファイルの内容を変更する必要があります。現在のシステムバージョンは「現在のシステムバージョン」セクションで確認できます。
contest
bool
値を true にすると、MOD コンテストの審査対象となります。デフォルトでは false です。
×
changelog
string
MOD の変更履歴です。ワークショップへ MOD を投稿したり、投稿済みの MOD を更新したりすると表示されます。
×
color
string
MOD リストに表示されるボックスの色を指定します。16進数カラーコードで定義します。未設定の場合はオレンジになります。
×
MOD ファイルとの置き換え
定義ファイルの中には、MOD に対応した各要素専用のセクションがあり、各要素ごとに置きかえる MOD ファイルが必要となります。
1つの定義ファイルの中に複数のセクションを含めることもできます。

置き換えについては、このガイドの次のセクション以降で詳細に説明します。
テクスチャ
テクスチャを置き換えるには、対象ファイルのパスを定義ファイル内で指定します。
画像ファイルは、拡張子が「.pak」のアーカイブファイルとして、「data」フォルダに保存されています。
アーカイブファイルは、7-Zip、WinRAR、WinZIP などのソフトで解凍できます。
該当するアーカイブファイルは以下の通りです。
  • units
  • alphamasks
  • hats
  • hairs
  • cards
  • field
---

テスクチャはPNG形式で元画像と同じサイズにしてください。

ユニット関連のテクスチャサイズ:256x256
カードのテクスチャサイズ:256x256 &128x128 (2種類のサイズ必須)
ホームマスのテクスチャサイズ: 256x256
その他のマスのテクスチャサイズ:128x128

---

まず、ユニット関連画像のパス指定についてです。
ユニット関連画像は1つのパスで全てのポーズを指定できます。
例えば、「ソラ&シャム(アイドル)」のデフォルトカラーを対象にする場合、下のサンプルコードのように「units/cuties_00_00」と指定することで、全てのポーズが対象となります。
「ソラ&シャム(アイドル)」のカラー1も対象にしたい場合は、「units/cuties_00_01」と指定します。
一部のポーズのみを置き換えたい場合は、後述の「高度な置き換え」をお読みください。

サンプルコード
"textures": [ "units/cuties_00", "units/cuties_01", "cards/cuties", ]

次にカード画像のパス指定についてです。
上のサンプルコードでは「cards/cuties」が指定されており、この1つのパス指定で2種類のサイズの両方が対象になります。
カード名とフレイバーテキストも変更したい場合は、後述の「高度な置き換え」をお読みください。
(※ユニット関連画像とは異なり、カード画像は一度定義するだけです。高度な置き換えでも同様です。)


高度な置き換え
高度な置き換えでは、ユニットの顔座標や、カードの名前フレーバーテキストといったパラメータの設定ができます。

高度な置き換えで利用できるパラメータは以下の通りです。

パラメータ
データ型
内容
必須
path
string
画像のファイルパス。
face_x
int
x座標。0~256で指定。
face_y
int
y座標。0~256で指定。
costume_id
int
イベント衣装の ID。未定義の場合は衣装は未選択の状態。
custom_name
string
設定したいカード名。カード画像のファイルパスと一緒に定義。
custom_flavor
string
設定したいフレーバーテキスト。カード画像のファイルパスと一緒に定義。
single_file
bool
ユニットの一部のポーズのみを置き換えるのに使用。true か false で定義。デフォルトは false。

顔座標はユニット画像の中央を定義します。一番分かりやすい例はゲーム内HUDです。
顔座標は、ユニットの顔の中央の座標値を指定してください。
下のサンプル画像のキャラの場合、顔の中央の座標値は X116 Y129 となります。



JSON ファイルには以下のように記載します。

"textures": [ { "path": "units/alicianrone_00_05", "face_x": 116, "face_y": 129 } ]

各衣装には個別の座標値が設定されています。
衣装の定義には、対象の衣装の ID 番号を指定します。
衣装の ID 番号は「衣装 ID」セクションで確認できます。

以下のサンプルコードでは、水着スグリの通常ポーズに座標値が追加されています。

"textures": [ { "path": "units/suguri_02_00_00", "face_x": 116, "face_y": 129, "costume_id": 2 } ]

高度な置き換えは通常の置き換えと組み合わせることができるため、別途 JSON ファイルを作成する必要はありません。

高度な置き換えが利用できるのはユニットとカードの画像のみです。
髪やアクセサリーなどのパス指定は、通常の置き換えと同様に「hairs/sora_b00」などすることで全てのポーズを一括で指定します。


以下のサンプルコードでは、最初と最後の塊で「units/sora_00」に高度な置き換えが設定されており、それ以外では通常の置き換えが設定されています。
"textures": [ { "path": "units/sora_00_00", "face_x": 125, "face_y": 140 }, { "path": "units/sora_00_01", "face_x": 123, "face_y": 138 }, { "path": "units/sora_00_02", "face_x": 122, "face_y": 145 }, { "path": "units/sora_00_03", "face_x": 126, "face_y": 141 }, { "path": "units/sora_00_04", "face_x": 124, "face_y": 170 }, { "path": "units/sora_00_05", "face_x": 125, "face_y": 137 }, "units/sora_01", "units/sora_02", "units/sora_03", "units/sora_04", "units/sora_05", "hairs/sora_b00", "hairs/sora_h00", "hairs/sora_m00", "hairs/sora_s00", "hats/sora_00", "hats/sora_01", "hats/sora_02", "hats/sora_03", "field/homemark_00", "field/mass_bonus0" { "path": "cards/cookie", "custom_name": "Sora's cookie", "custom_flavor": "You're not the only one who enjoy cookies... ―Sora" } ]
ペット1
他のグラフィックと異なり、ペットのテクスチャは通常のやり方での置き換えに対応していません。必ず下記の手順に従ってください。

ペットモジュール - ベース

パラメータ
データ型
内容
必須
id
string
ペットの ID。
floating
bool
ペット宙に浮いているなら true。デフォルトは false。
face_x
int
ユニットの顔座標と同様だが、ペットでは UI アイコンが対象。x 座標。デフォルトは 128。
face_y
int
y 座標。デフォルトは 128。
draw_offset_x
int
x 軸の値でテクスチャを補正。デフォルトは 0。
draw_offset_y
int
y 軸の値でテクスチャを補正。デフォルトは 0。
textures
Array
テクスチャの配列。各テクスチャに追加データが必要。

ペットモジュール - テクスチャ配列
パラメータ
データ型
内容
必須
layer
string
テクスチャのレイヤー。詳細はセクション「ペット2」を参照。
path
string
テクスチャのパス。フルパスで指定。

ペットモジュール - レイヤー配列
パラメータ
データ型
内容
必須
variant
int
レイヤーのバリアント。0 から 5 の間で指定。
layer
string
レイヤーの種類。
color
string
レイヤーの色。
multiply
bool
ブレンドモード「multiply」をレイヤーに適用。デフォルトは false。
ペット2
ペットレイヤー
ペットのグラフィックは3枚のレイヤーから成り、それぞれに異なる色をつけることができます。

  • ベースレイヤー
コードネームは「base」。ペットグラフィックの、他の2種類のレイヤーを差し引いた部分です。

  • シャドウレイヤー
コードネームは「shadow」。ペットグラフィックの陰影を定義します。

  • ラインアートレイヤー
コードネームは「lineart」。ペットグラフィックの輪郭を定義します。

上記の各レイヤーは、最大9枚のサブレイヤーを持つことができ、JSON ファイルで宣言したバリアントタイプと同様の順序で描写されます。

コードを使わずにペットに色をつけるには、「レイヤー配列」の色パラメーターを空欄にします。ただし、その場合However, you cannot use any variants that way.

モジュール例
{ "ModDefinition": { "name": "Pet mod", "description": "", "author": "Sora [Fruitbat Factory]", "system_version": 2, "changelog": "", "color": "#adb5e0" }, "ModReplacements": { "pets": [ { "id": "roboball", "floating": true, "face_x": 128, "face_y": 128, "textures": [ { "layer": "base", "path": "textures/mypet_b00_00" }, { "layer": "base", "path": "textures/mypet_b00_01" }, { "layer": "base", "path": "textures/mypet_b00_02" }, { "layer": "base", "path": "textures/mypet_b00_03" }, { "layer": "base", "path": "textures/mypet_b00_04" }, { "layer": "base", "path": "textures/mypet_b00_05" }, { "layer": "base", "path": "textures/mypet_b01_00" }, { "layer": "base", "path": "textures/mypet_b01_01" }, { "layer": "base", "path": "textures/mypet_b01_02" }, { "layer": "base", "path": "textures/mypet_b01_03" }, { "layer": "base", "path": "textures/mypet_b01_04" }, { "layer": "base", "path": "textures/mypet_b01_05" }, { "layer": "base", "path": "textures/mypet_s00_01" }, { "layer": "base", "path": "textures/mypet_s00_02" }, { "layer": "base", "path": "textures/mypet_s00_03" }, { "layer": "base", "path": "textures/mypet_s00_04" }, { "layer": "base", "path": "textures/mypet_s00_05" }, { "layer": "lineart", "path": "textures/mypet_l00_00" }, { "layer": "lineart", "path": "textures/mypet_l00_01" }, { "layer": "lineart", "path": "textures/mypet_l00_02" }, { "layer": "lineart", "path": "textures/mypet_l00_03" }, { "layer": "lineart", "path": "textures/mypet_l00_04" }, { "layer": "lineart", "path": "textures/mypet_l00_05" } ], "layers": [ { "variant": 0, "layer": "base", "color": "#d18202" }, { "variant": 0, "layer": "base", "color": "#c7d102" }, { "variant": 0, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 0, "layer": "lineart" }, { "variant": 1, "layer": "base", "color": "#02ced1" }, { "variant": 1, "layer": "base", "color": "#025cd1" }, { "variant": 1, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 1, "layer": "lineart" }, { "variant": 2, "layer": "base", "color": "#34eb7d" }, { "variant": 2, "layer": "base", "color": "#2c98e6" }, { "variant": 2, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 2, "layer": "lineart" }, { "variant": 3, "layer": "base", "color": "#e6e02c" }, { "variant": 3, "layer": "base", "color": "#e62c2c" }, { "variant": 3, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 3, "layer": "lineart" }, { "variant": 4, "layer": "base", "color": "#b04fa6" }, { "variant": 4, "layer": "base", "color": "#eed4ff" }, { "variant": 4, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 4, "layer": "lineart" }, { "variant": 5, "layer": "base", "color": "#ff0000" }, { "variant": 5, "layer": "base", "color": "#00ff00" }, { "variant": 5, "layer": "shadow", "color": "#dddddd", "multiply": true }, { "variant": 5, "layer": "lineart" } ] } ] } }

テクスチャのネーミングは以下の例のようにする必要があります。
b00 = ベースレイヤー1 テクスチャ
b01 = ベースレイヤー2 テクスチャ
s00 = シャドウレイヤー1 テクスチャ
l00 = ラインアートレイヤー テクスチャ

レイヤーの順序は、レイヤー配列での宣言により決定します。
上の例でいうと、base 0 → base 1 → shadow 0 → lineart となります。
BGM
BGM の置き換えには以下のパラメータを使います。
BGM ファイルは必ず OGG 形式にしてください。

パラメータ
データ型
内容
必須
unit_id
string
テーマ曲を変更したいユニットの ID。一覧は「ユニット ID」セクションに掲載。
event
string
曲の再生トリガーとなるイベント識別子。一覧は後述の「イベント」に掲載。
file
string
置き換え後の BGM のファイルパス。任意のフォルダ。拡張子は不要。
loop_point
int
曲のループポイントのサンプル値。まず曲全体が再生され、終了するとループポイントから再び再生される。サンプル値は「Audacity」といったオーディオエディタで確認可。ループポイントが未指定の場合は、常に曲の最初から終わりまで再生される。
volume
int / double / float
音量増減の追加設定。推奨指定範囲は -20 から 20 のあいだ。

サンプルコード
"music": [ { "unit_id": "sorasp", "file": "music/grayhued", "loop_point": 796411 } ]

イベント
「event」パラメータを指定することで、特定の箇所で音楽を再生させることができます。ただし、「event」パラメータと「unit_id」パラメータを同一エントリに含めることはできません。含めた場合は、「unit_id」パラメータが優先されます。

イベントの一覧は以下の通りです。

イベント識別子
再生箇所
main_menu
メインメニュー
standby
マルチプレイヤーロビーでの待機時、またはキャンペーン画面
dialog1
会話画面 キャンペーンやイベントの開始時
dialog2
会話画面
dialog3
会話画面 バトル
conclusion
会話画面 キャンペーンやイベントの終了時
ending1
クレジットロール
dialog4
会話画面 アーサーとニコのキャンペーン
final2
会話画面 アーサーとニコのキャンペーン
ending2
アーサーとニコのキャンペーン クレジットロール
idol_duet
「ソラ&シャム(アイドル)」が「スペシャルステージ」を使用
idol_instrumental
「ソラ&シャム(アイドル)」と「まりーぽっぽ」以外のユニットが「スペシャルステージ」を使用
idol_poppo
「まりーぽっぽ」が「スペシャルステージ」を使用
dialog5
会話画面 ミオのキャンペーン
dialog6
会話画面 ミオのキャンペーン カイ登場時
ending3
ミオのキャンペーン クレジットロール
tomomo_sweeteater
トモモ(すっぴん)が自身のハイパーを使用
maynie_ragingmode
メイニーのハイパーがアクティブになっている時
finalstage
トモモ地獄(キャンペーン Extra)
field_wintertown
ビギナータウン(冬) イントロ
field_desert
孤独の鉄道イントロ
field_pool
渦イントロ

下のサンプルコードでは、ロビー画面の音楽の置き換えがループポイント付きで定義されています。

サンプルコード
"music": [ { "event": "standby", "file": "music/menu", "loop_point": 614400 } ]
ボイス
ボイスの置き換えには、ボイスの種類によって以下の2つのパラメータのいずれか使用します。

  • character:置き換え後のキャラクターボイスファイルが保存されたフォルダのパス一覧です。
  • system:置き換え後のシステムボイスファイルが保存されたフォルダパス一覧です。

ボイスのパス指定は、以下のサンプルコードのようになります。
正しくパスが指定されると、pak ファイル内にある本来のボイスファイルは再生されず、自身でパスを指定したファイルが再生されるようになります。

サンプルコード
"voices" : { "character": [ "voice_cha_qp", "voice_cha_suguri", "voice_cha_kai" ], "system" : [ "voice_sys_suguri", "voice_sys_kai" ] }}


例えば、カイのシステムボイスのみを置き換えたい場合は、以下のコードになります。

サンプルコード
"voices" : { "system" : [ "voice_sys_kai" ] }}

ボイスファイルの準備
正常に置き換えを行うには、置き換え後のファイルの名前や保存場所を正しく設定する必要があります。
例えば、キャラクターボイス「ダイスロール1」の元ファイルは「0_0.wav」という名前ですので、置き換え後のボイスファイルの名前も同様にします。
ファイルを保存するフォルダには、ボイスを置き換えたいキャラクターの名前を付けます。
システムボイスについても同様です。
ボイスファイルの推奨サンプリングレートは 44,100Hz です。

以下はディレクトリ構造の例です。
この例では、きゅーぴーのキャラクターボイス「ダイスロール1と4」と、システムボイス「100%おれんじじゅ~すっ!」と「ワープ」を置き換え対象に指定しています。

ディレクトリ構造サンプル
cute qp mod (フォルダ) |__ voice_cha_qp (フォルダ) |____ 0_0.wav |____ 0_3.wav |__ voice_sys_qp (フォルダ) |____ title.wav |____ warp.wav |__ mod.json

ボイスファイルの名前一覧は、後述の「キャラクターボイス ファイル名」セクションにあります。
髪色
髪色の置き換えには3つの方法があります。

  • texture:自身で用意した画像ファイルを使っての置き換え。
  • singlecolor:ベース、影、追加色を定義しての置き換え。
  • gradient:ベース、セカンダリ、影、追加色を定義しての置き換え。

モジュールが扱えるパラメータは以下のとおりです。

パラメータ
データ型
内容
必須
unit_id
string
髪色を置き換えるユニットの ID 。一覧は「ユニット ID」セクションに掲載。
hair_color
int
置き換える髪色の番号。1から12まで。
technique
string
髪色を置き換える方法。上で紹介した3つから1つ選択。
base_color
string
16進数カラーコードの値。未定義の場合は白。
secondary_color
string
16進数カラーコードの値。未定義の場合は白。「gradient」でのみ使用。
shadow_color
string
16進数カラーコードの値。未定義の場合は「RGB: 128, 50, 50」。
add_color
string
16進数カラーコードの値。未定義の場合は追加色なし。

アルファ(透明度)も定義できます。
You can also specify an alpha value for your color:
#ff000000 : ARGB (255, 0, 0, 0)
#000000 : RGB (0, 0, 0) (未定義の場合、アルファは常に255。)

方法1:texture
自身で用意した画像ファイルに置き換える場合は、必須パラメータ以外の定義は不要です。
「ユニット画像・カード画像 」セクションで説明したように、元の画像ファイルと置き換える画像ファイルの名前を同一にし、所定のフォルダに保存してください。


hairs/sora_00_00:「ソラ」待機ポーズの髪色1を置き換え
hairs/sora_02_00_00 : 「ソラ」水着衣装待機ポーズの髪色1を置き換え

※公式には存在しない髪色も、ゲームが読み込める形式であれば定義することができます。

JSON サンプルコード
"hair_color": [ { "unit_id": "sora", "hair_color": 3, "technique": "texture" } ]


方法2:singlecolor
この方法は、ベースに指定した色を元に髪色を置き換えます。

JSON サンプルコード
"hair_color": [ { "unit_id": "sora", "hair_color": 1, "technique": "singlecolor", "base_color": "#000000", "shadow_color": "#ff0000" } ]

方法3:gradientcolor
この方法は、黒と白を元に髪色を置き換えます。
ベースの色が黒、セカンダリの色が白です。

JSON サンプルコード
"hair_color": [ { "unit_id": "sora", "hair_color": 2, "technique": "gradient", "base_color": "#000000", "secondary_color": "#ffffff", "shadow_color": "#ff0000" }, ]

方法2と3で使われる画像ファイルは、「アリシアンローネ」の場合は以下のようになります。

  • hairs/alicianrone_b00_00 (ベースの色)
  • hairs/alicianrone_h00_00 (髪のハイライト)
  • hairs/alicianrone_m00_00 (グラデーション)
  • hairs/alicianrone_s00_00 (影)
効果音
効果音を置き換える際は、定義ファイル内に「ModReplacements」という項目を追記し、その中に「sound_effects」と置き換える曲のファイル名を記載します。
置き換え後の効果音のファイルは全て「sound」という名前のフォルダに保存します。
このフォルダは、自身で作った MOD フォルダ直下に置きます。
効果音ファイルの推奨サンプリングレートは 44,100Hz です。

サンプルコード
"ModReplacements": { "sound_effects" : [ "cancel.wav", "cardget.wav", "decision.wav" ] }

上記のコードの場合、フォルダ構造は以下のようになります。

ディレクトリ構造サンプル
poppo mod (フォルダ) |__ sound (フォルダ) |____cancel.wav |____cardget.wav |____decision.wav |__ mod.json

上記の例では、「選択をキャンセル」、「カードをゲット」、「何かを選択」した時に再生される効果音が置き換えられています。
どの効果音がどの場面で再生されるかは、「効果音ファイル名」セクションを参照してください。
カスタム言語
カスタム言語の配列では、「directories」という属性のみを使います。

{ "ModDefinition": { "name": "French Jus d'Orange ", "description": "フランス語化MOD", "author": "Sora", "system_version": 2 }, "CustomLanguages": { "directories": [ "french" ] } }

必要なフォルダとファイルは、以下のような構造になるよう「mods」フォルダ内に配置してください。

French Jus d'Orange (フォルダ - MOD名と同名) |__ french (フォルダ - コードの「directories」属性に指定したものと同名) |_____<defineファイル、フォントファイルなど> |__ mod.json

複数の言語の翻訳を含めることができ、テクスチャやBGMの置き換えと組み合わせることができます。

上記の設定では、「french」フォルダ内にあるdefineファイルとフォントファイルの内容でゲーム内の言語が変更されます。
「languages」フォルダに既にカスタム言語ファイルがある場合は、それらのファイルを「mods」フォルダの所定の場所に移動させ、上記のJSONコードファイルをコピペし定義ファイルとして保存してください。
新規でカスタム言語を作成する場合は、以下のフォルダにテキストファイルの内容を確認してください。
100 Orange Juice\language\CustomLanguages.txt
===============================
MOD プレビュー画像
MOD にはプレビュー画像を含めることができます。
MOD をワークショップへ投稿する場合は必須です。

プレビュー画像は、縦横比16:9の PNG 形式で作成し、自身で作成した MOD フォルダの直下に「preview.png」という名前で保存してください。
ゲームがプレビュー画像を検知すると自動的に読み込みます。

ワークショップへアップロードする場合は、サイズを 1 MB 未満にしてください。
MOD のワークショップへの投稿
MOD を Steam ワークショップへ投稿には以下の2つが必須です。

  • JSON フォーマットで作成された MOD 定義ファイル。
  • MOD の有効なプレビュー画像 (詳細は「MOD プレビュー画像」セクション)

上記を用意し、ゲーム内から「公開」ボタンを押すと MOD がワークショップへ投稿されます。



MOD の投稿(アップロード)中に問題があった場合は、エラーメッセージが表示されます。

投稿が正常に完了すると、投稿した MOD のワークショップアイテムページに接続され、他のユーザーも使用できるようになります。
なお、投稿した MOD の公開状態はデフォルトで「公開」となっています。
コンテストへの参加
自身で制作した MOD を公式コンテストへ出すには、定義ファイル内に他の必須のパラメータと併せて、以下のコードを記載してください。
"contest": true

応募にあたり、自身で作成した MOD フォルダに保存されたファイルを Steam へ送信する必要があります。
ファイルの送信は、「MOD のワークショップへの投稿」セクションで説明した手順で MOD を投稿すれば完了します。

なお、応募用ファイルが入ったフォルダには、フル解像度の画像も含めるようにしてください。
MOD としては読み込まれませんが、コンテストに必要です。

※開催中のコンテストがない場合や、応募締め切りが過ぎている場合は、コンテスト用ファイルの送信や更新はできません。
※コンテスト応募用の MOD も通常の MOD と同じように、ゲーム内プレビューを設定したり、他のユーザーがサブスクライブしたりできます。なお、コンテスト開催中は、ゲーム内バインダーにはプレイスホルダーカードが追加されます。
===============================
旧式 MOD 定義ファイル
この方法はサポートされていません。
この方法に対応した MOD はユニット関連の画像のみです。

MOD をゲームに読み込ませるには、まず mods フォルダ内に MOD を保存するフォルダを作成します。このフォルダの名前が、その MOD の名前となります。

次に、そのフォルダの中に mod.txt という定義ファイルを作成します。この定義ファイルの中身は以下のようにしてください。

< MOD_NAME > The Cuties, but Sora is alone < MOD_DESCRIPTION > This mod made Sham quite upset. < MOD_AUTHOR > Sora [Fruitbat Factory] < MOD_AUTHOR_CONTACT > https://steamproxy.net/id/SoraTheGuardian < MOD_REPLACEMENTS > units/cuties_00_00 units/cuties_00_01 units/cuties_00_02 units/cuties_00_03 units/cuties_00_04 units/cuties_00_05

書き方はローカライズの定義(define)ファイルと同様です。
文字コードは必ず UTF-8 にしてください。


各項目の詳細は以下の通りです。

< MOD_NAME >*
ゲーム内で表示される MOD の名前。フォルダ名と異なってもOK。
< MOD_DESCRIPTION >
MOD の説明文。
< MOD_AUTHOR >
MOD の制作者名。
< MOD_AUTHOR_CONTACT > (Facultative)
MOD 制作者への連絡先。Steamプロフィールやメールアドレスなど。
< MOD_REPLACEMENTS >*
MOD のファイルパス。拡張子は省略。

以上全てを必ず記載してください。誤表記や抜けがある場合、MOD が正常に読み込まれない場合があります。

===============================
JSON エラー回避
定義ファイルである JSON ファイルに書かれたコードに誤りがあると、MOD が正常に読み込まれません。
下記のサイトでは、エラーになり得るコードがハイライトで表示されます。

https://jsonformatter.curiousconcept.com/
アルファマスク
MOD 制作の効率化のため、どのファイルが何なのかが分かる一覧を用意しました。

No.
アルファマスク
00
パンプキンヘッド:クリスマス衣装なし、身体+髪
01
パンプキンヘッド:クリスマス衣装あり、身体+髪
02
パンプキンヘッド:クリスマス衣装あり、クリラ用(ぬいぐるみがあるため別枠
03
クリスマス衣装:髪色が非デフォルト
04
王冠:身体+髪
05
クリスマスハット:身体+髪
06
ハロウィン衣装:身体+髪
07
ハロウィン衣装2017:身体+髪Halloween costume 2017: body + hair
08
クリスマス2017(トナちゃん着ぐるみ):身体+髪
09
スクールクラッシャーズ:髪
10
ハロウィン2018衣装(レオ着ぐるみ):身体+髪
11
ハロウィン2018衣装(トリック&トリート:身体+髪
12
サンタスクランブル衣装
13
豚化
14
RPG 2019 衣装
15
ミウサキ(バレーボール)、麦わら帽子、きゅーぴー(Dangerous)夏衣装
16
ハロウィン2019(ハロウィン作戦)衣装
17
夏イベント2020(浴衣)
ユニット ID
ユニット ID の一覧です。

名前
ユニット ID
アリシアンローネ
alicianrone
アルテ
alte
アーネル
arnelle
アーサー
arthur
アル
aru
アル(スクランブル)
arus
ロボボール
ball
M10(CO-OPボス)
bball
ビッグ・ザ・ハルオ(CO-OP ボス)
bchicken
ターニスライム(バウンティハント)
blob
ぽっぽ(ボス)
bpoppo
夏の獣(CO-OP ボス)
bqp
シフロボ
brobo
空飛ぶ城
castle
ケオレパルケ
ceor
ニワトリ
chicken
クリス
chris
クック
cook
ソラ&シャム(アイドル)
cuties
ソラ&シャム(アイドル)(ソラ。髪色設定のため別枠。)
cuties_sora
呪われた人形(バウンティハント)
doll
エリィ
ellie
フェルネット
fernet
モスゴーレム(バウンティハント)
golem
星を貪る者(CO-OP ボス)
gpoppo
ハレナ
halena
ヘリシード(バウンティハント)
heliseed
ヒメ
hime
ハロウィン2019 パンプキン
hw2019pumpkin
イル
iru
アイラ
islay
カエ
kae
カイ
kai
斬子
kiriko
クリララリス
krila
キョウスケ
ksuke
キョウコ
kyoko
きゅぴた
kyupita
バニザード(バウンティハント)
lizardit
孤独の車乗り
lonerider
ルルゥ
lulu
マール
marc
マール(パイロット)
marcpilot
店長
master
メイニー
maynie
メイ
mei
商人
merchant
ミミュウ
mimyuu
ミオ
mio
ミラ
mira
ミウサキ
miusaki
マゥス(バウンティハント)
mpoppo
ナナコ
nanako
ナート
nath
ナツミ
natsumi
ニコ
nico
NONAME
non
ぽっぽ(みっくす)
npoppo
ピート
peat
ぽっぽ
poppo
きゅーぴー
qp
きゅーぴー(Dangerous)
qpd
ロポチ
ropochi
サキ
saki
カモメ
seagull
ビッグ・ザ・ジョナサン
seagullboss
シャム
sham
シェリー
sherry
ソラ
sora
ソラ(軍服)
sorasp
スターブレイカー
starb
スグリ
suguri
スグリ(460億年)
suguri46
スグリ(Ver. 2)
sugurib
スミカ
sumika
スイートブレイカー
sweetb
しゅら
syura
テオトラッタ
teotoratta
海賊子分
teq_minion
テキーラ
tequila
トモモ(すっぴん&スイートイーター)
tmsw
トマト
tomato
トモモ
tomomo
トロライト
troll
ツィー
tsih
ユキ
yuki
ユキ(Dangerous)
yukid
ユウキ
yuuki


先駆者
evilguardian
守護者
guardian
ウールゥ
fluff
テラスネーク
snek
エリンギー
shroom
ゴウスト
ghost
エメモングラー
mole
マグマー
magma
オーロラ
fae
カード ID
Zomorokoさんによるガイドにてご確認いただけます。
https://steamproxy.net/sharedfiles/filedetails/?id=2234774298
キャラクターボイス ファイル名
キャラクターボイスのファイル名一覧です。
ファイル名は、「接頭番号+アンダースコア+バリエーション番号」で構成されています。
バリエーション番号は0から始まるのでご注意ください。

例として、「ワープ3」のファイル名は、ワープの接頭番号「10」+アンダースコア+バリエーション番号「2」を組み合わせた「10_2.wav」です。
別の例として、「ドロップマス4」のファイル名は、ドロップマスの接頭番号「21」+アンダースコア+バリエーション番号「3」を組み合わせた「21_3.wav」です。

「*」が付いた接頭番号は、バリエーションが1つしかないことを示しています。
そういったボイスを複数置き換える際は、接頭番号のみ変更し、バリエーション番号は全て「0」のままです。
例として、「特殊ボイス3」と「特殊ボイス4」のファイル名は、前者が「52_0.wav」、後者が「53_0.wav」です。

接頭番号
使用場面
0
サイコロ投げ
1
カード使用
2
トラップカード使用
3
バトルカード使用
4
ハイパーカード使用
5
ダウンから復活
6
復活失敗
7
攻撃
8
被ダメージ
9
回復
10
ワープ
11
ダウン
12
バトルを挑む
13
バトルを挑まれる
14
バトルで攻撃
15
バトルで被ダメージ
16
バトルで被ダメージ(大)
17
攻撃回避
18
バトル勝利
19
バトル敗北
20
ボーナスマス
21
ドロップマス
22
トラップを踏む
23
ボスとエンカウント
24
スターノルマ選択
25
バトルノルマ選択
26
キャラクター選択
27
ゲーム開始
28
ゲーム勝利
29
新アイテム・カード獲得
30
未使用
31~45 *
汎用ボイス
46
他のユニットのハイパーカード使用
47
同名のボーナスユニットなどのハイパーカード使用 (例:ソラ(軍服)の「才気覚醒」、アル(スクランブル)の「サンタのお仕事」)
50~*
特殊ボイス
システムボイス ファイル名
システムボイスのファイル名一覧です。

ファイル名
使用場面
1.wav
未使用
2.wav
未使用
3.wav
未使用
4.wav
未使用
5.wav
未使用
6.wav
未使用
battle.wav
バトル開始時にキャラクターボイス未再生
bonus.wav
ボーナスマスでのサイコロ
check.wav
ノルマチェック
connected.wav
ロビー接続完了
connectfailed.wav
ロビー接続失敗:一般エラー
connecting.wav
接続ロビー選択
draw.wav
カードドロー、Playground! Draw 2 ミニゲーム 報酬
drop.wav
ドロップサイコロ、Playground! ドロップ ペナルティ
fruitbatfactory.wav
未使用
ko.wav
未使用
lobbyfull.wav
ロビー接続失敗:ロビーフル
move.wav
移動マス
newitem.wav
未使用
norma1.wav
ノルマレベル1達成
norma2.wav
ノルマレベル2達成
norma3.wav
ノルマレベル3達成
norma4.wav
ノルマレベル4達成
norma5.wav
未使用
norma6.wav
最終ノルマ達成
ojandfbf.wav
「橙汁&フルーツバットファクトリー」スプラッシュ画面
orangejuice.wav
未使用
player1.wav
プレイヤー1 ターン開始
player2.wav
プレイヤー2 ターン開始
player3.wav
プレイヤー3 ターン開始
player4.wav
プレイヤー4 ターン開始
playerjoin.wav
プレイヤーがロビーに入室
playerleft.wav
プレイヤーがロビーから退室
revive.wav
未使用
shindenken.wav
「神電研」スプラッシュ画面
skip.wav
プレイヤーのターンスキップ
start.wav
未使用
stop.wav
プレイヤーが「不動の物体」の効果を発動
title.wav
タイトル画面
trap.wav
トラップカード発動
warp.wav
ワープマス、Playground! ワープ 報酬
warpmove.wav
ワープムーブマス
win.wav
バトル勝利にキャラクターボイスが未再生
衣装 ID
衣装 ID の一覧です。

#
衣装
0
衣装なし
1
スグリ&ヒメ 冬服
2
2018夏 水着 (スグリ、ソラ、ヒメ)
3
豚化
4
2019夏 水着 (マール、フェルネット、きゅーぴー)
5
ぽっぽ用星を貪る者衣装
6
斬子用さくらみこ衣装
7
斬子用さくらみこ衣装(デフォルト)
8
ぽっぽ用マゥス衣装
9
日焼けきゅーぴー
10
2020夏 水着 (サキ、カエ、ナート)
効果音ファイル名
効果音ファイル名の一覧です。
MOD フォルダ内のサウンドフォルダに、置き換えたい効果音と同じファイル名にした効果音ファイルを入れてください。

ファイル名
使用場面
decision.wav
決定
cancel.wav
キャンセル、戻る
page1.wav
バインダーなどのページめくり(進む)
page2.wav
バインダーなどのページめくり(戻る)
trapset.wav
トラップカードセット
cardget.wav
カードを獲得する
carduse.wav
カードを使う
traptrigger.wav
トラップカード発動
powerup.wav
パワーアップ音:バトルブースト、花火、会話中
healing.wav
HP回復
ko.wav
ユニットダウン
throw.wav
サイコロを投げる
normaclear.wav
ノルマ達成
normamiss.wav
ノルマ未達成
chapterstart.wav
チャプター開始
star.wav
スター獲得
hit.wav
被バトルダメージ小
warp.wav
ワープ
turnstart.wav
ターン開始、カウントダウン
rebound.wav
サイコロのはずむ音
encounter.wav
バトル開始
miracle.wav
奇跡
miracle2.wav
スター復活、ルルゥのラッキーエッグ、アーケードアニメーション
discard.wav
カードを捨てる
stockeffect.wav
ストック効果適用
win.wav
ゲームに勝利
alert.wav
ボスがフィールド上に出現
battlewin.wav
バトルで勝利または逃走
criticalhit.wav
被バトルダメージ大
evasion.wav
バトルで回避
cannon.wav
爆発、マールのロケット
blaze.wav
ブレイジング!、ボム爆発、手札を捨てる
status1.wav
バトルステータス効果
status2.wav
バトルステータス効果
chain.wav
束縛の鎖
airraid.wav
フィールドイベント「エアレイド」
shield.wav
攻撃ガード、様々なカード効果
electricity.wav
ターボ満タン、デルタフィールド
sugurihyper.wav
「スグリ」ゲームシリーズのハイパー
lockon.wav
ボムの時限タイマー、拡散フォトンライフルとロケット砲のアニメーション
qps_damage.wav
夏の獣ダウン、ワークショプの MOD に低評価をつける
synth-sweep2.wav
とろける記憶アニメーション
synthsweep_wind.wav
カットシーン
propeller.wav
カットシーン(プロペラ)、「好敵手」と「ロケット砲」のアニメーション
wind.wav
風の音:カットシーン
qps_hyper.wav
とろける記憶のアニメーション、カットシーン、アーケード
synthsweep_new.wav
エクステンション、ルルゥのラッキーエッグ
item_get.wav
チョコや雪をマスから獲得
cardflip1.wav
遊び場ミニゲーム、Build-A-Castle でピースを回転させる
cardflip2.wav
遊び場ミニゲーム
crash.wav
衝突音:カットシーン
crash2.wav
衝突音2:カットシーン
destruction.wav
破壊音:カットシーン
schoolchime.wav
学校のチャイム:カットシーン
se_quake.wav
地震音:カットシーン、執念深き復讐者
se_sea_waves.wav
海の波音:カットシーン
wind2.wav
風の音2:「ホワイトクリスマッシャー」のアニメーション
food_crunch.wav
食べ物を噛み砕く音:カットシーン
gulp_once.wav
液体を飲む音(1回):カットシーン
gulp_3times.wav
液体を飲む音(3回):カットシーン
phone.wav
電話の呼出音:カットシーン
sms.wav
携帯電話のバイブ音:カットシーン
jingle01_full.wav
ジングル1(フル):カットシーン
jingle01_short.wav
未使用
throw01.wav
雪玉を投げる音1
throw02.wav
雪玉を投げる音2
throw03.wav
雪玉を投げる音3
snowball_ground01.wav
雪玉が地面に落ちる音1
snowball_ground02.wav
雪玉が地面に落ちる音2
snowball_ground03.wav
雪玉が地面に落ちる音3
lighter.wav
ライターの着火音:カットシーン
laser.wav
レーザー発射音:拡散フォトンライフルのアニメーション
clang.wav
金属を叩く音:金属製モノコック
launch.wav
ミサイル発射音:無差別な支援爆撃とロケット砲のアニメーション
missilehit.wav
ミサイル着弾音:無差別な支援爆撃のアニメーション
place_cup.wav
カップを置く音:カットシーン
sip.wav
液体をすする音:カットシーン
pour_water.wav
液体を注ぐ音:カットシーン
explosion.wav
爆発音:カットシーン、バウンティハントのスモークボム
ags_weaponattack.wav
剣での攻撃音:「駆け抜けるアリシアンローネ」のアニメーション
ags_weaponswing_1.wav
剣を振る音1:「駆け抜けるアリシアンローネ」のアニメーション
ags_weaponswing_2.wav
剣を振る音2:「駆け抜けるアリシアンローネ」のアニメーション
ags_weaponswing_3.wav
剣を振る音3:「駆け抜けるアリシアンローネ」のアニメーション
ags_weaponswing_4.wav
剣を振る音4:「駆け抜けるアリシアンローネ」のアニメーション
ags_whoosh.wav
高速移動音:「駆け抜けるアリシアンローネ」のアニメーション(
fishsplash.wav
魚が水しぶきを上げる音:釣りミニゲーム
se_fire.wav
火の音:カットシーン
cicada_short.wav
セミの鳴き声:カットシーン
mudblup.wav
ベトベトマスを踏む
trainpass.wav
未使用
motorcycle.wav
アップシフトのアニメーション
===============================