KURUMAMOD

カーパック作成ガイド

Car Pack Creation Guide

Blender で作った車を Minecraft の中で走らせるまで。Blender を触ったことがない人が、1 台ぶんの見た目と音を最後まで作り切れることを目指しています。

Everything from a mesh in Blender to a car you can drive in Minecraft. Written so that someone who has never opened Blender can finish one complete vehicle — looks and sound.

何を作りますか?

What are you making?

作りたいものを選んでください。どのページにも出てくる手順(Blender の基本、jar に固めて配る、確かめかた)は「共通」にまとめてあります。

Pick what you want to make. Steps that every page needs (Blender basics, packing a jar, checking it in game) live under "Common".

1このページについて

1About this page

車やパーツを足すのに Java は要りません。JSON・モデル・テクスチャ・音だけの jar を作って mods/ に入れます。このページには、何を作る人にも共通の手順をまとめてあります。

You do not need Java to add cars or parts. You build a jar holding only JSON, models, textures and sounds, and drop it in mods/. This page holds the steps everyone needs, whatever they are making.

やりたいことから探す

Find what you want to do

やりたいことどこを読むか
まず見本を動かしてみたい共通の 4 章
Blender を触ったことがない共通の 3 章
自分の車を走らせたい車の 1 章から順に
ライト・透ける窓・映るミラーを付けたい車の 3 章
エンジン音を変えたい車の 7 章
走り(加速・曲がりかた)を決めたい車の 8 章
ホイールを作って換装画面で選べるようにしたいホイールの 1 章・2 章
性能の違うタイヤを作りたいホイールの 3 章
ターボ・ブローオフバルブを作りたいパーツの 1 章
ウイング・バンパーなどの外装パーツを作りたいパーツの 2 章
マフラーを作りたいパーツの 3 章
jar にして配りたい共通の 4 章
うまく動かない共通の 6 章
I want to…Read
See the example running firstCommon, chapter 4
Learn Blender from zeroCommon, chapter 3
Drive my own carCar guide, chapter 1 onwards
Add lights, see-through windows, working mirrorsCar guide, chapter 3
Change the engine soundCar guide, chapter 7
Set how it drives (acceleration, handling)Car guide, chapter 8
Make a wheel players can pick in the parts screenWheel guide, chapters 1 and 2
Make tyres with different gripWheel guide, chapter 3
Make a turbo or blow-off valveParts guide, chapter 1
Make body parts such as wings and bumpersParts guide, chapter 2
Make an exhaustParts guide, chapter 3
Pack it into a jar and share itCommon, chapter 4
Fix something that doesn't workCommon, chapter 6

要るもの

What you need

Blender5.2.0 以降を想定(それより前でも通るはずですが、書き出し画面の項目名が少し違うことがあります)。無料。blender.org。モデルの要らない部品(ターボなど)だけなら不要
テキストエディタJSON を書きます。メモ帳で構いません
MinecraftKurumaMod を入れたもの。確かめながら作ります
絵を描くものテクスチャを貼るときだけ。貼らなくても走ります
BlenderWritten against 5.2.0 (earlier versions should work; a few export labels differ). Free, from blender.org. Not needed for parts without a model (a turbo, say)
Text editorFor the JSON files. Notepad is fine
MinecraftWith KurumaMod installed. You check your work as you go
Paint programOnly for a texture. The car drives without one
最初に安心してよいこと

寸法をぴったり合わせる必要はありません。「このメッシュは何 m で作った」と JSON に書けば、ゲームがその比で大きさを合わせます。

直すたびに Minecraft を再起動する必要もありません。ゲームの中で F3+T を押せば、モデルもテクスチャも読み直されます。

TWO THINGS TO RELAX ABOUT

You do not have to hit exact dimensions. Write "this mesh was built at N metres" in the JSON and the game scales it to fit.

You do not have to restart Minecraft after each edit either. Press F3+T in game and the model and texture reload.

2全体像

2The whole picture

モデルのある車や部品は、5 つの手順で作ります。どの章も、このどれかを詳しくしたものです。

A car or part with a model takes five steps. Every chapter is one of them in detail.

やること

What you do

  1. Blender形を作る。(車の 1〜4 章、ホイールの 1 章、パーツの 2〜3 章)
  2. BlenderOBJ で書き出す。(車の 5 章)
  3. ファイル決まったフォルダへ置く。(車の 6 章)
  4. ファイルJSON に「何 m で作ったか」を書く。(車の 6 章)
  5. ゲームF3+T で読み直して見る。(共通の 5 章)

これで、直すたびに 5 へ戻って、再起動せずに確かめられます。はじめは粗い箱のような車で 1→5 を一周すると、あとは Blender の作業に集中できます。

  1. BlenderModel it. (Car guide, chapters 1–4; Wheel guide, chapter 1; Parts guide, chapters 2–3)
  2. BlenderExport it as OBJ. (Car guide, chapter 5)
  3. FilePut it in the right folder. (Car guide, chapter 6)
  4. FileWrite "how many metres I built it at" into the JSON. (Car guide, chapter 6)
  5. GamePress F3+T and look. (Common, chapter 5)

Each time you fix something, go back to step 5 — no restart. Push a crude box of a car through 1→5 first; after that, the rest is Blender work.

① Blender で 作る 1. Model it in Blender ② OBJ で 書き出す 2. Export as OBJ ③ 決まった場所へ 置く 3. Put it in the right folder ④ JSON に寸法を 書く 4. Write the size into JSON ⑤ ゲームで F3+T 5. Press F3+T in game 直すたびにここへ戻る(再起動は要らない) Come back here on every edit — no restart needed
図 1. 作業の流れ。④ で書くのは「何 m で作ったか」だけです
Fig. 1. The workflow. Step 4 is only ever "how many metres did I build it at".

必要なときだけ

Only when you need it

モデルの要らない部品を作りたい(ターボなど)

ターボ・ブローオフバルブ・タイヤの性能だけを変える部品は、1・2 が要りません。JSON を置いて(3)、ゲームで確かめる(5)だけです(パーツの 1 章)。

Make a part without a model (a turbo, say)

Turbos, blow-off valves and parts that only change performance skip steps 1 and 2. You place the JSON (3) and check it in game (5) (Parts guide, chapter 1).

仕組みを知りたい(assets/ と data/)

パックの中身は 2 つに分かれます。

  • assets/ … 見た目(モデル・テクスチャ・音・表示名)。各プレイヤーのゲームが読む。F3+T で読み直す
  • data/ … 走りと部品の中身(諸元・部品の性能・初期装備)。サーバーが読む。/reload で読み直す

jar 1 つにまとめれば、両方が一緒に読まれます。

How it works (assets/ and data/)

A pack has two halves.

  • assets/ — the looks (models, textures, sounds, display names). Read by each player's game. Reloads with F3+T
  • data/ — driving and part contents (spec, part performance, default parts). Read by the server. Reloads with /reload

Put both in one jar and both are read together.

3Blender はこれだけ覚える

3Just enough Blender

Blender を触ったことがない人向けに、このガイドで使う操作だけを並べます。使える人は 車の 1 章へ。

For readers who have never opened Blender: only the operations this guide uses. If you know Blender, skip to chapter 1 of the Car guide.

覚えること

What to learn

  1. Blender真ん中の広い所(3D ビューポート)で形を作る。車体・窓・ライトのように分けたかたまり 1 つ 1 つを「オブジェクト」と呼ぶ
  2. Blender右上の一覧(アウトライナー)で、オブジェクトの名前を変える。名前をダブルクリックする
  3. Blender単位はメートルのまま使う。床のマス目 1 つが 1m
  4. Blender車の前を −Y、上を +Z に向けて作る。テンキーの 1 で、車を正面から見た向きになる。車の左が +X
  5. Blender位置はワールド原点(赤い線と緑の線が交わる点)に合わせる。オブジェクトを選ぶと出るオレンジの点は気にしない

これで、車の 1 章から先の手順を進められます。

  1. BlenderBuild in the big area in the middle (the 3D viewport). Each separate lump — body, window, light — is an "object"
  2. BlenderRename objects in the list at the top right (the outliner). Double-click the name
  3. BlenderKeep the units in metres. One floor square is 1 m
  4. BlenderBuild with the front of the car towards −Y and up towards +Z. Numpad 1 shows the car from the front. The car's left is +X
  5. BlenderLine things up with the world origin (where the red and green lines cross). Ignore the orange dot that appears on a selected object

You can now follow the steps from chapter 1 of the Car guide.

+Z = 上 +Z = up −Y = 前 −Y = front +X = 車の左 +X = car's left ワールド原点 world origin (+Y = 後ろ、−X = 車の右、−Z = 地面より下) (+Y = rear, −X = car's right, −Z = below ground)
図 2. Blender 標準の向き。エクスポート設定も標準のままでよく、読み替えは MOD 側が行います
Fig. 2. Blender's default orientation. Leave the export settings alone too — the mod does the conversion.
名前で役目が決まる

この MOD では、オブジェクトやマテリアルの名前がゲームでの役目を決めます。light_head はヘッドライトとして点き、glass で始まる名前は透けます。名前は決まりどおりに付けてください(車の 3 章)。

NAMES DECIDE WHAT THINGS DO

In this mod, object and material names decide what something does in game. light_head lights up as a headlight; names starting with glass turn see-through. Name things exactly as the rules say (chapter 3 of the Car guide).

必要なときだけ

Only when you need it

半分だけ作って左右対称にしたい(ミラーモディファイア)

半分を作って、ミラーモディファイアで反対側を作ります。書き出すときに自動で適用されるので、「適用」を押す必要はありません。

ただし、後ろが映る左右のドアミラーだけは別々のオブジェクトにします。モディファイアで 1 つにすると、左右に同じ景色が映ります(車の 3 章のミラー)。

Build half and mirror it (mirror modifier)

Build one half and let a mirror modifier make the other. The exporter applies it for you, so there is no need to press "Apply".

The exception: the two reflecting door mirrors must be separate objects. Merged by the modifier, both show the same view (mirrors, chapter 3 of the Car guide).

スクリプトを実行したい(Scripting タブ)
  1. 上のタブから Scripting を開く
  2. 新規 を押す
  3. スクリプトを貼り付ける
  4. Alt+P(または ▶ 実行)を押す

車の 1 章で、ゲージを置くのに一度だけ使います。

Run a script (the Scripting tab)
  1. Open the Scripting tab at the top
  2. Press New
  3. Paste the script
  4. Press Alt+P (or the ▶ Run button)

You need it once, to place the gauge in chapter 1 of the Car guide.

仕組みを知りたい(なぜオレンジの点は関係ないのか)

書き出されるのは、各頂点のワールド座標です。オブジェクト原点(オレンジの点)は書き出されないので、どこにあっても構いません。ゲームはワールド原点を基準に車を置きます。

Blender の向き(前 −Y・上 +Z)とゲームの向きの読み替えは MOD がやります。書き出し画面の向きの設定は触りません(車の 5 章)。

How it works (why the orange dot does not matter)

The exporter writes each vertex in world coordinates. The object origin (the orange dot) is not written, so it can sit anywhere. The game places the car relative to the world origin.

The mod converts Blender's axes (front −Y, up +Z) to the game's. Leave the axis settings in the export dialog alone (chapter 5 of the Car guide).

最小の車を作る

Make a minimal car

新しい車を 1 台ゲームに出すのに、これだけは要るという流れです。各手順の詳しいことは、手順の最後にある章にあります。ここでは、パックの名前を mypack、車種の名前を ae86 とします。

The bare minimum to get one new car into the game. Each step links to the chapter with the details. Here the pack is called mypack and the car ae86.

手順

Steps

  1. Blenderゲージを置く。→ 1 章
  2. Blenderゲージのタイヤに合わせて車体を作る。原点は「地面の高さ・前後輪の中間・左右の中央」→ 2 章
  3. Blender車体を ae86.obj に書き出す。Selected Only だけ入れて、ほかは既定のまま → 5 章
  4. ファイル見本の carpack/example/ をフォルダごとコピーし、kurumamod_example_carpack をすべて mypack に置き換える。フォルダ名 2 つ(assets/ の下と data/ の下)、いちばん上のロゴ画像のファイル名、そしてすべてのファイルの中身(toml と、JSON の中のパス)。使える文字は a-z・0-9・_ だけ → 6 章
  5. ファイル車体を置く。ae86.obj と ae86.mtl を assets/mypack/models/entity/ に、テクスチャを assets/mypack/textures/entity/ae86.png に。絵がまだ無ければ、白く塗った小さな PNG でよい → 4 章
  6. ファイル見た目の JSON を書く。assets/mypack/vehicles/sample.json を ae86.json に改名して、中身をこうする:
    {
      "body":  { "model": "mypack:models/entity/ae86.obj",
                 "texture": "mypack:textures/entity/ae86.png" },
      "wheel": { "model": "kurumamod:models/entity/wheel.obj",
                 "texture": "kurumamod:textures/entity/wheel.png" }
    }
    タイヤは KurumaMod のものを借りている → 6 章
  7. ファイル諸元の JSON を書く。data/mypack/cars/sample.json を ae86.json(見た目の JSON と同じ名前)に改名して、中身をこうする:
    {
      "values": { "mass": 1200.0 }
    }
    書いていない項目は既定の車と同じになる → 8 章
  8. lang表示名を lang に書く。assets/mypack/lang/ja_jp.json と en_us.json に "car.mypack.ae86": "AE86" → 6 章
  9. ファイルフォルダの中身を jar に固めて、mods/ に入れる。フォルダごとではなく中身を固める → 共通の 4 章
  10. ゲーム起動して、クリエイティブの「KurumaMod」タブから車を出して乗る。→ 共通の 5 章

これで、自分の車体で、既定の車と同じように走る車が 1 台増えます。

  1. BlenderPlace the gauge. → chapter 1
  2. BlenderBuild the body around the gauge wheels. Origin at ground level, halfway between the axles, on the centreline → chapter 2
  3. BlenderExport the body as ae86.obj. Tick only Selected Only; leave the rest at defaults → chapter 5
  4. FileCopy the whole carpack/example/ folder and replace every kurumamod_example_carpack with mypack. That is two folder names (under assets/ and under data/), the file name of the logo image at the top, and the contents of every file (the toml files and the paths inside the JSON). Use only a-z, 0-9 and _ → chapter 6
  5. FilePut the body in place. ae86.obj and ae86.mtl go in assets/mypack/models/entity/, the texture in assets/mypack/textures/entity/ae86.png. No art yet? A small all-white PNG will do → chapter 4
  6. FileWrite the look JSON. Rename assets/mypack/vehicles/sample.json to ae86.json and make it:
    {
      "body":  { "model": "mypack:models/entity/ae86.obj",
                 "texture": "mypack:textures/entity/ae86.png" },
      "wheel": { "model": "kurumamod:models/entity/wheel.obj",
                 "texture": "kurumamod:textures/entity/wheel.png" }
    }
    The wheels are borrowed from KurumaMod → chapter 6
  7. FileWrite the spec JSON. Rename data/mypack/cars/sample.json to ae86.json (same name as the look JSON) and make it:
    {
      "values": { "mass": 1200.0 }
    }
    Anything not written stays as on the default car → chapter 8
  8. langAdd the display name to lang: "car.mypack.ae86": "AE86" in assets/mypack/lang/en_us.json and ja_jp.json → chapter 6
  9. FileZip the folder's contents into a jar and put it in mods/. Zip what is inside the folder, not the folder itself → chapter 4 of Common
  10. GameStart the game, take the car from the "KurumaMod" creative tab and get in. → chapter 5 of Common

You now have one more car: your body, driving like the default car.

必要なときだけ

Only when you need it

jar を作らずに、まず見た目だけ確かめたい

リソースパックで KurumaMod の既定の車を自分の車体に差し替えれば、jar を作らずに F3+T で何度でも試せます。手順は6 章の「A」にあります。

Check the looks first, without building a jar

Override KurumaMod's built-in car with your body using a resource pack. No jar needed, and F3+T reloads it as often as you like. See route "A" in chapter 6.

もっと作り込みたい
やりたいこと見る章
ライトを光らせる・窓を透けさせる・ミラーに映す3 章
テクスチャを描く4 章
座席の位置・車体の大きさを直す6 章
エンジン音を変える7 章
走り(重さ・エンジン・足まわり)を変える8 章
自分のホイールを履かせるホイールの 1 章
ウイングやバンパーを付け替えられるようにするパーツの 2 章
Go further
What you wantWhere
Working lights, see-through windows, reflecting mirrorsChapter 3
Paint a textureChapter 4
Fix the seat position or the body sizeChapter 6
Change the engine soundChapter 7
Change how it drives (weight, engine, suspension)Chapter 8
Fit your own wheelsChapter 1 of the Wheel guide
Make wings or bumpers swappableChapter 2 of the Parts guide
直したものを入れ直したい
  • assets/ の中(モデル・テクスチャ・見た目の JSON・lang)を直したら、ゲームで F3+T
  • data/ の中(諸元)を直したら、ゲームで /reload

jar に入れて試しているときは、jar を作り直して入れ替え、ゲームを起動し直します。

Reload what you changed
  • After changing anything in assets/ (model, texture, look JSON, lang), press F3+T in game
  • After changing anything in data/ (the spec), run /reload in game

If you are testing from a jar, rebuild the jar, swap it in and restart the game.

うまくいかないとき
  • MOD 一覧に出ない … フォルダごと jar に固めた(META-INF/ が jar の直下にない)。または modId に - や . を使った
  • タブに車が出ない … data/mypack/cars/ae86.json の場所か、JSON の書き方が違う。理由はログに出る
  • 出てくるが、既定の車の姿のまま … 見た目の JSON のファイル名が諸元と違う。または body.model のパスか名前空間(mypack:)が違う
  • 表示名が ae86 のまま … lang のキーが car.mypack.ae86 になっていない
  • 車体が大きすぎ・小さすぎ・タイヤとずれる … ゲージに合わせて作れていない。designWheelBase と designWheelRadius に実際の寸法を書く(6 章)

ほかの症状は共通の 6 章にあります。

When it doesn't work
  • Not in the mod list — you zipped the folder itself (META-INF/ is not at the top of the jar), or modId contains - or .
  • No car in the tab — data/mypack/cars/ae86.json is in the wrong place or not valid JSON. The reason is in the log
  • It appears, but with the default car's body — the look JSON's file name differs from the spec's, or the body.model path or namespace (mypack:) is wrong
  • The display name shows as ae86 — the lang key is not car.mypack.ae86
  • The body is too big, too small, or off from the wheels — it does not match the gauge. Write your real sizes into designWheelBase and designWheelRadius (chapter 6)

Other symptoms are in chapter 6 of Common.

1ゲージを置く

1Place the gauge

車体を作る前に、寸法の目安になる枠(ゲージ)を Blender に置きます。ゲージに合わせて作れば、JSON の寸法は既定のままで済みます。

Before you model, put a reference frame (the gauge) into Blender. Build to it and the sizes in the JSON can stay at their defaults.

やること

What to do

  1. Blender上の Scripting タブを開き、新規(New)を押す。
  2. Blendermodeling_tools/blender_gauge.py の中身を全部貼り付けて、実行する。▶ を押すか Alt+P

これで、タイヤ 4 つ・地面・シャシー基準面がワイヤーフレームで置かれます。

  1. BlenderOpen the Scripting tab at the top and press New.
  2. BlenderPaste the whole of modeling_tools/blender_gauge.py and run it. Press ▶ or Alt+P

Four wheels, the ground and the chassis plane now appear as wireframes.

Blender Scripting tab and the New button
図 3. 上部の Scripting タブ(左上)を開き、New を押してから貼り付けます
Fig. 3. Open the Scripting tab (top left), press New, then paste.

置かれるもの

What it places

名前何か
gauge_wheel_FL ほか 4 つタイヤの位置と大きさ。ここにタイヤハウスが来るように車体を作る
gauge_ground地面(Z = 0)。ワールド原点はこの高さ
gauge_chassis_planeシャシー基準面(Z = 0.602m)。ゲームが車の「位置」とする高さ。4 隅が車軸の真上
NameWhat it is
gauge_wheel_FL and 3 moreWhere the wheels sit and how big they are. Build the wheel arches around these
gauge_groundThe ground (Z = 0). The world origin is at this height
gauge_chassis_planeThe chassis plane (Z = 0.602 m), the height the game treats as the car's position. Its corners sit right above the axles

必要なときだけ

Only when you need it

ゲージを置き直したい

もう一度実行するだけです。前のゲージは消えてから置き直されます。

ゲージは選択できない設定になっています。作業中に間違って動かすことはなく、A で全部を選んでも入りません。

Place the gauge again

Just run it again. The old gauge is removed before the new one goes in.

The gauge cannot be selected. You cannot move it by accident, and A (select all) leaves it out.

ゲージの寸法を知りたい
ホイールベース3.12 m(前後輪の距離)
トレッド1.80 m(左右輪の距離)
タイヤ半径0.45 m(直径 90cm)
シャシー基準面0.602 m

実車より 2 割大きめです。Minecraft のプレイヤーはずんぐりしているので、実寸だと車が小さく見えるためです。

See the gauge's sizes
Wheelbase3.12 m (front axle to rear axle)
Track1.80 m (left wheel to right wheel)
Wheel radius0.45 m (90 cm diameter)
Chassis plane0.602 m

That is 20% bigger than a real car. Minecraft players are stocky, and a true-size car looks small next to them.

ゲージに合わせずに作りたい(作ってしまった)

それでも動きます。実際に作った寸法を、見た目の JSON の designWheelBase(ホイールアーチの前後の距離)と designWheelRadius(タイヤの半径)に書きます(6 章)。ゲームがその比で車体を拡大・縮小して、ゲージの大きさに合わせます。

Build without matching the gauge (or you already did)

It still works. Write the sizes you actually built into designWheelBase (distance between the arches) and designWheelRadius (wheel radius) in the look JSON (chapter 6). The game scales the body by that ratio to fit the gauge size.

実車と同じ大きさのゲージにしたい

スクリプトの先頭の SCALE = 1.2 を 1.0 にします。そのときは諸元(data/<pack>/cars/<car>.json)の wheel_base・track_width・wheel_radius も同じ寸法に揃えます(8 章)。揃えないと、タイヤだけが元の位置と大きさで出ます。

はじめての車では触らないでください。

Use a real-world-size gauge

Change SCALE = 1.2 at the top of the script to 1.0. Then set wheel_base, track_width and wheel_radius in the spec (data/<pack>/cars/<car>.json) to the same sizes (chapter 8). If you don't, the wheels still appear at the old positions and size.

Leave it alone for your first car.

ホイールを作りたい

ホイールは車体とは別のファイルで作り、専用のゲージ(modeling_tools/blender_wheel_gauge.py)を使います。ホイールの 1 章を見てください。

Build a wheel

Wheels are built in a separate file with their own gauge, modeling_tools/blender_wheel_gauge.py. See chapter 1 of the Wheel guide.

2車体を作る

2Build the body

車体のメッシュを作る章です。決まりは原点の位置と向きだけで、大きさと形は自由です。

This chapter is about modelling the body. The only rules are where the origin is and which way the car faces; size and shape are up to you.

最小の車体を作る

Make a minimal body

  1. Blender前を −Y、上を +Z に向けて作る。Blender の標準の向きのまま(テンキー 1 で正面から見た向き)
  2. Blenderワールド原点が「地面の高さ・前後輪のちょうど中間・左右の中央」に来るように置く。ゲージのとおりに作れば、そうなっている
  3. Blenderタイヤハウスを、ゲージのタイヤに合わせて切る。

これで、書き出せばゲームのタイヤと車体が合います。

  1. BlenderFace the car towards −Y with +Z up. That is Blender's default (numpad 1 looks at the front)
  2. BlenderPut the world origin at ground level, exactly halfway between the axles, on the centreline. If you follow the gauge, it already is
  3. BlenderCut the wheel arches around the gauge wheels.

Once exported, the body and the in-game wheels line up.

シャシー基準面 = Z 0.602 m chassis plane = Z 0.602 m 前後輪の中点 midpoint of the axles 地面 = Z 0 ground = Z 0 ワールド原点(0, 0, 0) world origin (0, 0, 0) ホイールベース 3.12 m wheelbase 3.12 m
図 4. 車体の原点は「地面の高さ・前後輪の中点・左右中央」。重心ではありません
Fig. 4. The body origin sits at ground level, midway between the axles, on the centreline — not at the centre of mass.
The S15 body in Blender, with the gauge wheels sitting in the wheel archesゲージのタイヤGauge wheelsタイヤハウスをこの輪に合わせるCut the archto fit this ringワールド原点(地面・前後輪の中間・左右の中央)World origin(ground, between the axles, centreline)
図 5. 見本の S15 の車体。ゲージのタイヤ(線で描かれた輪)が、ちょうどタイヤハウスに収まるように作ってあります
Fig. 5. The S15 body. The gauge wheels (the wire rings) sit right inside the wheel arches.

原点の 3 つの条件

The three origin rules

高さ地面(Z = 0)。車体の底ではない
前後前輪と後輪のちょうど中間。全長の中心とは限らない
左右中央
HeightGround level (Z = 0), not the underside of the body
Front–rearExactly halfway between the axles, not necessarily the middle of the overall length
Left–rightOn the centreline

合わせるのはワールド原点です。オブジェクトを選んだときに出るオレンジの点(オブジェクト原点)はどこにあっても構いません(共通の 3 章)。

What matters is the world origin. The orange dot you see on a selected object (its object origin) can be anywhere (chapter 3 of Common).

必要なときだけ

Only when you need it

原点がずれていたので直したい

車体を全部選び(A)、G で動かします。ゲージは選択できないので一緒には動きません。

Fix an origin that is off

Select the whole body (A) and move it with G. The gauge cannot be selected, so it stays put.

左右対称に半分だけ作りたい

ミラーモディファイアを使います。書き出しのときに自動で適用されるので、「適用」は押さなくてかまいません。

ただし、左右のドアミラーの鏡だけは別々のオブジェクトにします(3 章のミラー)。

Model half and mirror it

Use a mirror modifier. The exporter applies it for you, so you don't need to press "Apply".

The one exception is the glass of the two door mirrors, which must be separate objects (mirrors in chapter 3).

ボンネットやバンパーを別のオブジェクトに分けたい

分けても分けなくても同じです。ゲームは名前の決まっていないオブジェクトを全部まとめて車体として描きます。同梱の車体は作業のしやすさで body / hood / trunk / bumper_f / bumper_r に分けてあります。

ライト・ガラス・ミラー・付け替える部品だけは名前で働きが決まるので、別のオブジェクト(または別のマテリアル)にします(3 章)。

Split the bonnet or bumpers into their own objects

Split or not, it makes no difference. The game draws every object without a special name as body. The bundled body is split into body / hood / trunk / bumper_f / bumper_r only for convenience while modelling.

Lights, glass, mirrors and swappable parts are the exception: their names decide what they do, so they need their own objects (or materials) (chapter 3).

車内(内装)も作りたい

作らなくてもかまいません。何も作らなければ、車体の裏面がそのまま内装として見えます。作るなら、ふつうの車体として作れば描かれます。座席の位置は見た目の JSON の seat で決まり、座席のメッシュとは関係ありません(6 章)。

Model an interior

You don't have to. Without one, the back faces of the body show through and serve as the cabin. If you do model one, build it as ordinary body and it is drawn. Where the player sits comes from seat in the look JSON, not from any seat mesh (chapter 6).

ポリゴン数の目安を知りたい

あまり気にしなくてかまいません。同梱の車体は 671 面、タイヤは 344 面です。面は四角形のままにしておくと軽く描けます(5 章)。

How many polygons?

Don't worry much about it. The bundled body is 671 faces and the wheel 344. Keeping faces as quads draws faster (chapter 5).

うまくいかないとき
  • 走るとタイヤがボディを突き抜ける … タイヤハウスがゲージのタイヤに合っていない
  • 車体が地面に埋まる・浮く … 原点を車体の底に置いている。地面の高さ(Z = 0)へ動かす
  • タイヤが前後にずれる … 原点が前後輪の中間にない。全長の中心に置いていないか見る
  • 前後が逆・左右が鏡像 … 書き出しの Forward Axis を触った(5 章)
When it doesn't work
  • Tyres poke through the body when driving — the arches don't match the gauge wheels
  • The body sinks into the ground or floats — the origin is at the underside of the body. Move it to ground level (Z = 0)
  • The wheels sit too far forward or back — the origin is not halfway between the axles. Check you didn't use the middle of the overall length
  • Front and back swapped, or mirrored — Forward Axis was changed on export (chapter 5)

3ライト・ガラス・ミラー(名前で決まる機能)

3Lights, glass and mirrors (names that do things)

オブジェクトに決まった名前を付けるだけで、ライトが光り、窓が透け、ミラーに後ろが映ります。JSON には何も書きません。

Give an object one of a few set names and it lights up, turns see-through or reflects what is behind. Nothing goes into the JSON.

ライトを光らせる

Make the lights work

  1. Blenderライトのレンズを別のオブジェクトにして、名前を付ける。ヘッドライトは light_head、テールランプは light_tail、バックランプは light_reverse。左右で 1 つのオブジェクトでよい(ミラーモディファイアのままでよい)
  2. Blenderレンズの面を、車体から 1〜2mm 浮かせる。
  3. Blenderレンズの UV は展開せず、1 点に潰してテクスチャの白い画素に置く。色はゲームが付ける

これで、L でヘッドライトが点き、テールランプはいつもうっすら光ってブレーキで明るくなり、ギアを R に入れるとバックランプが点きます。

  1. BlenderMake each lens its own object and name it. light_head for headlights, light_tail for tail lights, light_reverse for reverse lights. One object for both sides is fine (a mirror modifier is fine)
  2. BlenderFloat the lens faces 1–2 mm proud of the body.
  3. BlenderDon't unwrap the lens: collapse its UVs to one point on a white pixel of the texture. The game adds the colour

L now turns the headlights on, the tail lights glow dimly and brighten under braking, and the reverse lights come on in R.

light_ で始まる名前はこの 3 つだけ

light_fog のような名前を付けると、そこが穴になって何も描かれません。フォグランプは light_head に含めるか、ふつうの車体として作ります。

ONLY THESE THREE light_ NAMES

Name something light_fog and it becomes a hole where nothing is drawn. Fold fog lights into light_head, or model them as plain body.

窓を透けさせる

Make the windows see-through

  1. Blender窓を別のオブジェクトにして、名前を glass で始める。glass・glass_side・glass.front など

これで、窓が透けます(濃さは 0.35)。

  1. BlenderMake the windows their own object and start the name with glass. glass, glass_side, glass.front and so on

The windows are now see-through (opacity 0.35).

ミラーに後ろを映す

Make the mirrors reflect

  1. Blender鏡を別のオブジェクトにして、名前を付ける。ルームミラーは mirror_rear、ドアミラーは mirror_left と mirror_right。筐体ごとの箱 1 つでよい
  2. Blender左右のドアミラーは、別々のオブジェクトにする。ミラーモディファイアで 1 つにしたままにしない(適用してから分ける)
  3. Blender鏡になる面(いちばん広い平らな面)を、運転席のほうへ向ける。角度は合わせなくてよい
  4. ゲームH のメニューで、ミラーを入れる。既定は切

これで、ミラーに後ろの景色が実際に映ります。

  1. BlenderMake each mirror its own object and name it. mirror_rear for the rear-view mirror, mirror_left and mirror_right for the door mirrors. One box for the whole housing is fine
  2. BlenderKeep the two door mirrors as separate objects. Don't leave them joined by a mirror modifier (apply it, then separate)
  3. BlenderTurn the mirror face (the largest flat face) towards the driver. You don't need to aim it
  4. GameTurn mirrors on in the H menu. They are off by default

The mirrors now show what is really behind you.

light_head mirror_left / mirror_right glass / glass_side light_tail / light_reverse これら以外のオブジェクトは、名前が何であっても全部「車体」 every other object, whatever it is called, is body
図 6. 名前で機能が決まる部位。ルームミラー(mirror_rear)は室内なのでこの図には出ていません
Fig. 6. Where the meaningful names sit. The rear-view mirror (mirror_rear) is inside the cabin, so it is not shown.
The S15 in Blender showing only its glass, light and mirror objects, selected in the outlinerglass_frontglass_frontglass_side_…glass_side_…light_headlight_headlight_tail / light_reverselight_tail / light_reversemirror_left / mirror_rightmirror_left / mirror_right選んだ行が、名前で役目の決まるオブジェクトThe selected rows are theobjects whose names set a role
図 7. 見本の S15 で、名前で役目が決まるオブジェクト(glass_…・light_…・mirror_…)だけを表示したところ。アウトライナーの名前が、そのままゲームの中の役目になります
Fig. 7. The S15 with only its role objects shown (glass_…, light_…, mirror_…). The names in the outliner are what the game reads.

名前の一覧

All the names

名前なるもの
light_headヘッドライト。L で点く。光の筋もここから出る
light_tailテールランプ。いつもうっすら、ブレーキで最大
light_reverseバックランプ。ギアが R のとき
glass で始まる半透明のガラス
mirror_rearルームミラー
mirror_left / mirror_rightドアミラー
part_ で始まる付け替える部品。その部品を付けているときだけ描かれる(パーツの 2 章)
gauge_ で始まる捨てられる(ゲージが混ざっても描かれない)
それ以外車体
NameWhat it becomes
light_headHeadlight. L turns it on; the light beam starts here too
light_tailTail light. Dim at all times, full under braking
light_reverseReverse light. On in R
starts with glassTranslucent glass
mirror_rearRear-view mirror
mirror_left / mirror_rightDoor mirrors
starts with part_A swappable part. Drawn only while that part is fitted (chapter 2 of the Parts guide)
starts with gauge_Discarded, so a stray gauge is never drawn
anything elseBody

必要なときだけ

Only when you need it

オブジェクトを分けずに、一部の面だけをライトやガラスにしたい

面に割り当てるマテリアルの名前を light_tail・glass・mirror_left などにします。その面だけがその働きになります。バンパーの一部の面をテールランプにする、といった使い方です。

  1. 編集モード(Tab)で面を選ぶ
  2. マテリアルタブでスロットを「+」で増やし、そのマテリアルを入れる
  3. 「割り当て」を押す
  • オブジェクト名とマテリアル名が違う働きを指すときは、マテリアル名が勝ちます。役目の名前でないマテリアル(body など)なら、オブジェクト名の働きのまま
  • 名前の後ろの .001 は無視されます。light_tail.001 もテールランプ
  • 書き出しの「マテリアル」の「書き出し」は入れたまま(既定で入っています)。外すと名前が OBJ に入りません
オブジェクト名面のマテリアルその面
light_headbodyヘッドライト
light_headglassガラス
Bumperlight_tailテールランプ
Bumperbody車体
Turn just some faces into a light or glass, without splitting the object

Name the material on those faces light_tail, glass, mirror_left and so on. Only those faces take the role. A few faces of a bumper can become a tail light this way.

  1. Select the faces in Edit Mode (Tab)
  2. On the Material tab, add a slot with "+" and put the material in it
  3. Press "Assign"
  • When the object name and the material name ask for different roles, the material wins. A material without a role name (body, say) leaves the object's role in place
  • A trailing .001 is ignored: light_tail.001 is still a tail light
  • Keep "Export Materials" ticked in the OBJ exporter (it is on by default), or the names never reach the OBJ
Object nameFace materialThat face
light_headbodyHeadlight
light_headglassGlass
Bumperlight_tailTail light
BumperbodyBody
レンズの色を自分で塗りたい

レンズの UV を展開して、テクスチャに色を塗ります。展開したレンズは塗った色がそのまま出ます。

レンズの UV色
1 点に潰すゲームが付ける(ヘッドは電球色、テールは赤、バックは白)。UV の場所を取らない
展開するテクスチャの色

どちらでも、点いたときの明るさと消えたときの暗さはゲームが付けます。テクスチャで暗く塗る必要はありません。

Paint the lens colour yourself

Unwrap the lens and paint it in the texture. An unwrapped lens shows exactly the painted colour.

Lens UVsColour
Collapsed to one pointSet by the game (warm white head, red tail, white reverse). Uses no UV space
UnwrappedFrom the texture

Either way, the game handles how bright it is when on and how dim when off. Don't paint that into the texture.

ガラスの濃さを変えたい

窓にマテリアルを割り当てて、その Alpha を下げます(例 0.2 でもっと薄く、0.6 で濃く)。その値がそのまま濃さになります。Alpha が 1 のまま、またはマテリアルが無ければ 0.35 です。

書き出した .mtl を OBJ と一緒に置いてください。濃さはこのファイルが運びます。

Change how dark the glass is

Give the window a material and turn its Alpha down (0.2 for lighter, 0.6 for darker). That value is the opacity. With Alpha left at 1, or no material at all, it is 0.35.

Keep the exported .mtl next to the OBJ; it carries the opacity.

窓を何枚かのオブジェクトに分けたい

全部 glass で始めれば、何枚でもかまいません(glass.front / glass.front_side / glass.rear など)。glass のすぐ後ろに _ か . を置きます。glasshouse のように続けた名前はガラスになりません。

light_ と違い、glass の名前は自由に増やしても穴は開きません。

Split the windows into several objects

Any number is fine as long as each starts with glass (glass.front, glass.front_side, glass.rear and so on). Put _ or . right after glass; a name that runs straight on, like glasshouse, is not glass.

Unlike light_, new glass names never leave a hole.

ミラーの筐体と鏡を分けたい

筐体はふつうの名前(見本では body_mirror_left)にして、鏡の板だけを mirror_left にします。こうすると、どの面が鏡になるか迷いません。

筐体ごと 1 つの mirror_ にした場合は、いちばん広い平らな面だけが鏡になり、ほかの面はふつうの車体として描かれます。

Separate the mirror housing from the glass

Give the housing an ordinary name (body_mirror_left in the sample) and name only the glass plate mirror_left. Then there is no doubt about which face reflects.

If the whole housing is one mirror_ object, only its largest flat face reflects; the other faces are drawn as ordinary body.

ウイングなどの部品にライトを付けたい

部品のオブジェクト(part_…)の中の面に、ライトのマテリアルを割り当てます。GT ウイングのハイマウントストップランプなら light_tail です。ウイングを外せばランプも消えます。

部品の中のミラーは映りません(ふつうの面として描かれます)。部品の作り方はパーツの 2 章にあります。

Put a light on a part such as a wing

Assign a light material to faces inside the part object (part_…). For a high-mounted brake light on a GT wing, use light_tail. Take the wing off and the lamp goes with it.

Mirrors inside a part don't reflect (they are drawn as plain faces). How to make parts is in chapter 2 of the Parts guide.

仕組みを知りたい(ミラーに何が映るか)
  • 何を映すかは、車に対して決まっています。板の角度は使いません。実車で乗った人がミラーを合わせるのと同じで、作った角度は「合わせる前の姿」です
  • ルームミラーは真後ろを、1 度だけ下向きに映します
  • ドアミラーは 1.5 度下向きで、地平線が鏡の中ほどより少し上に来ます。外へは、鏡の内側 15% に自分の車の横腹が映るところまで振ります
  • 横に映る幅は決まっています(ルームミラー 34 度、ドアミラー 22 度)。縦は鏡の縦横比で決まり、横長に作るほど縦に狭くなります
  • ルームミラーかドアミラーかは、名前ではなく鏡の位置で決まります。車の中心から左右 0.35m 以内ならルームミラーです。left / right の名前が実際の左右と逆でも正しく映ります
  • UV は要りません。面の中の位置がそのまま使われます
  • 鏡ごとに、その位置から世界をもう一度描いています。左右のドアミラーを 1 つのオブジェクトにすると、左右で同じ景色が映るのはこのためです
How it works (what a mirror shows)
  • What each mirror looks at is fixed relative to the car. The angle of the plate is not used. Like a real driver adjusting the glass after getting in, the angle you modelled is only the "before adjustment" pose
  • The rear-view mirror looks straight back, 1° down
  • Door mirrors look 1.5° down, putting the horizon a little above the middle of the glass. They are turned outward until your own car's flank fills the inner 15% of the glass
  • The horizontal field of view is fixed (34° rear-view, 22° door). The vertical follows the glass's aspect ratio: the wider you make it, the narrower the vertical view
  • Whether it is a rear-view or a door mirror is decided by where it is, not its name: within 0.35 m of the car's centreline it is the rear-view mirror. If left / right are swapped, it still reflects correctly
  • No UVs needed. The position within the face is used directly
  • Each mirror redraws the world from its own position. That is why two door mirrors joined into one object show the same view
うまくいかないとき
  • ライトを足したところが穴になる … light_head / light_tail / light_reverse 以外の light_ 名を付けた
  • レンズがチラつく … レンズの面が車体と同じ面にある。1〜2mm 浮かせる
  • レンズの色がおかしい … 展開した UV が、テクスチャの塗っていない場所を指している。1 点に潰して白い画素に置くか、テクスチャに色を塗る
  • 窓が透けない … 名前が glass で始まっていない(glasshouse のように続けていないか)。マテリアルの Alpha を使っているなら .mtl を一緒に置いたか
  • ミラーが映らない … H で入れたか。描画設定が「最高(Fabulous)」のときと、シェーダーパックを使っているときは映らない(暗いガラスになる)
  • 左右のミラーに同じ景色が映る … ミラーモディファイアで 1 つのオブジェクトのまま。適用してから分ける
  • ドアミラーが真後ろしか映さない … 鏡が車の中心から 0.35m 以内にあり、ルームミラーとして扱われている
  • ログに役目が食い違うと出る … オブジェクト名とマテリアル名が違う働きを指している。マテリアルのほうが使われている
When it doesn't work
  • A hole where you added a light — you used a light_ name other than light_head / light_tail / light_reverse
  • The lens flickers — the lens sits flush with the body. Float it 1–2 mm
  • The lens is the wrong colour — its unwrapped UVs point at an unpainted part of the texture. Collapse them onto a white pixel, or paint the texture
  • Windows aren't see-through — the name doesn't start with glass (or runs straight on, like glasshouse). If you use material Alpha, is the .mtl next to the OBJ?
  • Mirrors show nothing — did you turn them on in H? They don't reflect with graphics set to "Fabulous" or with a shader pack (you get dark glass)
  • Both door mirrors show the same view — they are still one object via a mirror modifier. Apply it and separate them
  • A door mirror only looks straight back — it is within 0.35 m of the centreline, so it is treated as the rear-view mirror
  • The log says roles disagree — the object name and the material name ask for different roles. The material's role is used

1ホイールのモデルを作る

1Model the wheel

ホイールを Blender で作り、OBJ に書き出すまでです。ホイールは車体とは別のファイルで作ります。

This chapter takes a wheel from Blender to an exported OBJ. Wheels are built in a separate file from the body.

最小のホイールを作る

Make a minimal wheel

  1. Blender新しいファイルで、ゲージを置く。Scripting タブで modeling_tools/blender_wheel_gauge.py を実行する。半径 0.45m の輪・車軸の線・地面・表を示す矢印が置かれる
  2. Blenderゲージの輪に収まるように、ホイールを作る。原点は車軸の中心に置く。円柱から作るなら、先に R Y 9 0 で回して軸を左右(X)へ向ける
  3. Blenderホイールの表(デザイン面)を +X へ向ける。ゲージの矢印の側。作るのは左側用の 1 つだけ
  4. Blenderタイヤも作るなら、ホイールとは別のオブジェクトにして、名前を Tire にする。リムだけで作るなら、この手順は要らない
  5. Blenderゲージを除いてホイールだけを選び、OBJ に書き出す。「Selected Only」を入れ、「Triangulated Mesh」は入れない(設定の全体は車の 5 章と同じ)
  6. ファイル書き出したファイルとテクスチャを置く。assets/mypack/models/entity/my_wheel.obj(.mtl も一緒に)と assets/mypack/textures/entity/my_wheel.png

これで、ホイールのモデルができました。換装画面で選べるようにするのは 2 章、自分の車に最初から履かせるのは下の「自分の車に最初から履かせたい」です。

  1. BlenderIn a new file, place the gauge. Run modeling_tools/blender_wheel_gauge.py from the Scripting tab. It places a 0.45 m radius ring, the axle line, the ground and an arrow marking the outer face
  2. BlenderModel the wheel to fit inside the gauge ring, with the origin at the centre of the axle. If you start from a cylinder, first rotate it with R Y 9 0 so its axis runs left–right (X)
  3. BlenderPoint the face of the wheel (the design side) towards +X, the side the gauge arrow points to. Build the left-hand wheel only
  4. BlenderIf you model a tyre too, make it a separate object from the wheel and name it Tire. Skip this if you only build the rim
  5. BlenderSelect only the wheel (not the gauge) and export it as OBJ. Tick "Selected Only" and leave "Triangulated Mesh" off (the full settings are the same as chapter 5 of the Car guide)
  6. FilePut the exported file and the texture in your pack: assets/mypack/models/entity/my_wheel.obj (with its .mtl) and assets/mypack/textures/entity/my_wheel.png

The wheel model is done. To make it selectable in the parts screen, go to chapter 2; to fit it to your own car from the start, see "Fit it to my own car" below.

横から見た図 side view 断面(上から見た図) cross-section, from above 地面 ground 半径 radius 回転軸 = X(左右) spin axis = X +X = 表 +X = outer face −X = 内側 −X = inboard 原点は車軸の中心(底ではない) origin at the axle centre, not the bottom 左側用を 1 つだけ作る build the left-hand wheel only
図 8. ホイールに求められるのはこの 3 つ(原点・回転軸・表の向き)だけです
Fig. 8. Only three things are required of a wheel: origin, spin axis, and which way the outer face points.

必要なときだけ

Only when you need it

自分の車に最初から履かせたい

車の見た目の定義 assets/mypack/vehicles/<車>.json の wheel にモデルとテクスチャを書き、作った半径を designWheelRadius(wheel の外、いちばん外側)に書きます:

{
  "body":  { "model": "mypack:models/entity/my_car.obj",
             "texture": "mypack:textures/entity/my_car.png" },
  "wheel": { "model": "mypack:models/entity/my_wheel.obj",
             "texture": "mypack:textures/entity/my_wheel.png" },
  "designWheelRadius": 0.45
}

このファイルのほかの項目は車の 6 章にあります。

Fit it to my own car

In the car's looks file assets/mypack/vehicles/<car>.json, set the model and texture under wheel, and write the radius you built at as designWheelRadius (outside wheel, at the top level):

{
  "body":  { "model": "mypack:models/entity/my_car.obj",
             "texture": "mypack:textures/entity/my_car.png" },
  "wheel": { "model": "mypack:models/entity/my_wheel.obj",
             "texture": "mypack:textures/entity/my_wheel.png" },
  "designWheelRadius": 0.45
}

The rest of this file is in chapter 6 of the Car guide.

ゲージと違う大きさで作りたい

大きさは自由です。作った半径(m)を、車に履かせるなら designWheelRadius、部品にするなら designRadius(2 章)に書きます。ゲームは、この値と車のタイヤ半径の比で拡大して描きます。

ゲーム内の調整画面でタイヤ半径を変えると、見た目もそのまま追従します。タイヤは接地したまま、車体だけが上がります(リフトアップ)。

Build it at a different size from the gauge

Any size is fine. Write the radius you built at (in m) as designWheelRadius when fitting it to a car, or as designRadius when making it a part (chapter 2). The game scales the mesh by the ratio between this value and the car's tyre radius.

Change the tyre radius in the in-game tuning screen and the model follows: the tyres stay on the ground and the body rises (a lift-up).

タイヤを作らず、KurumaMod のタイヤを使いたい

リムだけで作れば、KurumaMod 標準のタイヤが自動で嵌まります。ホイールごと借りるなら、モデルを kurumamod:models/entity/wheel.obj、テクスチャを kurumamod:textures/entity/wheel.png にします(車の 6 章)。

Skip the tyre and use KurumaMod's

Build only the rim and KurumaMod's own tyre is fitted automatically. To borrow the whole wheel, use kurumamod:models/entity/wheel.obj as the model and kurumamod:textures/entity/wheel.png as the texture (chapter 6 of the Car guide).

仕組みを知りたい(なぜタイヤに Tire と名前を付けるのか)

換装画面でタイヤ(3 章)を選ぶと、ゲームは tire で始まる名前(大文字小文字は問わない)のオブジェクトを隠し、選んだタイヤをリムに嵌めて描きます。

  • タイヤを選んでいない(ノーマル)ときは、あなたのタイヤがそのまま出る
  • 名前が無いと、タイヤもホイールの一部として描かれたままになり、選んだタイヤと重なって見える
  • シェーダーパックの影は、タイヤだけが落とす。地面にスポークの模様が出ない
How it works (why name the tyre Tire)

When a tyre (chapter 3) is picked in the parts screen, the game hides any object whose name starts with tire (in any case) and draws the picked tyre on the rim instead.

  • With no tyre picked (Normal), your own tyre is drawn as it is
  • Without the name, your tyre stays part of the wheel and shows through the picked one
  • With shader packs, only the tyre casts a shadow, so no spoke pattern appears on the ground
うまくいかないとき
  • タイヤが大きすぎる・小さすぎる … designWheelRadius(部品なら designRadius)が、作った半径になっていない
  • 回るとぶれる・地面に埋まる・浮く … 原点が車軸の中心にない。タイヤの底に置いていないか見る
  • タイヤが横倒しで転がる … 回転軸が左右(X)を向いていない。R Y 9 0 で回す
  • 右側のタイヤの表が内側を向く … 表が +X を向いていない。左側用として作り直す(右側は MOD が鏡像にして描く)
  • 1 か所にタイヤが 2 本描かれる … 左右 2 つ作っている。左側用の 1 つだけにする
  • 選んだタイヤと自分のタイヤが重なる … タイヤのオブジェクト名が tire で始まっていない
  • 全体が白い … .mtl を置いていないか、マテリアルが無い。形が正しければ問題ない(色の付け方は車の 4 章)
When it doesn't work
  • Wheels too big or too small — designWheelRadius (or designRadius for a part) is not the radius you built at
  • Wobbles as it spins, sinks into the ground, or floats — the origin is not at the axle centre. Check it is not at the bottom of the tyre
  • Rolls on its side — the spin axis does not run left–right (X). Rotate with R Y 9 0
  • The right-hand wheels face inward — the face is not towards +X. Rebuild it as the left-hand wheel (the mod mirrors it for the right)
  • Two tyres drawn in one place — you modelled both sides. Keep only the left-hand one
  • Your tyre shows through the picked one — the tyre object's name does not start with tire
  • Everything is white — no .mtl, or no material. Harmless if the shape is right (colouring is in chapter 4 of the Car guide)

4テクスチャを貼る

4Add a texture

車体に色や模様を付ける章です。テクスチャが無くても車は走るので、形だけ先に作ってあとで貼ってもかまいません。

This chapter is about giving the body colour and detail. The car drives without a texture, so you can build the shape first and paint it later.

最小のテクスチャを貼る

Add a minimal texture

  1. Blender車体を UV 展開して、PNG のテクスチャに色を塗る。大きさは自由
  2. Blenderマテリアルを使っているなら、Base Color を白(1.0)にする。
  3. ファイルPNG を置き、見た目の JSON で指す。assets/mypack/textures/entity/mycar.png に置いて、assets/mypack/vehicles/mycar.json の body に書く:
    "body": { "model": "mypack:models/entity/mycar.obj",
              "texture": "mypack:textures/entity/mycar.png" }

これで、ゲームで F3+T を押すと車体にテクスチャが貼られます。

  1. BlenderUV-unwrap the body and paint a PNG texture. Any resolution
  2. BlenderIf you use materials, set Base Color to white (1.0).
  3. FilePut the PNG in place and point the look JSON at it. Save it as assets/mypack/textures/entity/mycar.png and write it into body in assets/mypack/vehicles/mycar.json:
    "body": { "model": "mypack:models/entity/mycar.obj",
              "texture": "mypack:textures/entity/mycar.png" }

Press F3+T in game and the body is textured.

必要なときだけ

Only when you need it

UV を張らずに、まず形だけ確かめたい

そのままでかまいません。UV 展開していない面は、テクスチャの 1 点の色で塗りつぶされます。絵がまだ無ければ、白く塗った小さな PNG を置いておけば足ります。

ライトのレンズは、UV を展開しないほうが都合がよいことがあります(3 章)。

Check the shape first, without UVs

That works as it is. Faces without UVs are filled with the colour of a single pixel of the texture. If you have no art yet, a small all-white PNG is enough.

For light lenses, leaving them unwrapped is often the better choice (chapter 3).

タイヤにも自分のテクスチャを使いたい

車体とタイヤは別々のテクスチャを指せます。見た目の JSON の wheel に書きます:

"wheel": { "model": "mypack:models/entity/mywheel.obj",
           "texture": "mypack:textures/entity/mywheel.png" }

タイヤのモデルの作り方はホイールの 1 章にあります。

Use your own texture on the wheels too

Body and wheels can point at different textures. Write it into wheel in the look JSON:

"wheel": { "model": "mypack:models/entity/mywheel.obj",
           "texture": "mypack:textures/entity/mywheel.png" }

How to model the wheel is in chapter 1 of the Wheel guide.

テクスチャを使わず、マテリアルの色だけで塗り分けたい

できます。マテリアルの Base Color が、テクスチャの色に掛け合わされて出ます。テクスチャを白一色にしておけば、マテリアルの色がそのまま出ます。書き出した .mtl を OBJ と一緒に置いてください。色はこのファイルが運びます。

Colour it with material colours only, no texture

You can. A material's Base Color is multiplied over the texture, so with an all-white texture the material colour comes through as is. Keep the exported .mtl next to the OBJ; it carries the colours.

うまくいかないとき
  • テクスチャが暗い … マテリアルの Base Color が Blender の既定の 0.8 グレーのまま。白にする
  • マテリアルの色が出ず、全体が白い … .mtl を OBJ と一緒に置いていない。マテリアルを使わないつもりなら、それで問題ない
  • テクスチャが変わらない … F3+T を押したか。texture のパスと名前空間(mypack:)が合っているか
When it doesn't work
  • The texture comes out dark — the material's Base Color is still Blender's default 0.8 grey. Set it to white
  • Material colours don't show; everything is white — the .mtl is not next to the OBJ. If you don't use materials, that is fine
  • The texture doesn't change — did you press F3+T? Do the texture path and namespace (mypack:) match?

5OBJ に書き出す

5Export to OBJ

Blender の車体を、ゲームが読む OBJ ファイルにする章です。入れるチェックは 1 つだけで、あとは既定のままにします。

This chapter turns the Blender body into the OBJ file the game reads. You tick one box and leave everything else at its default.

やること

What to do

  1. Blender車体を全部選ぶ(A)。ゲージは選ばれない
  2. Blenderファイル → エクスポート → Wavefront (.obj) を開く。
  3. Blender右のパネルで Selected Only を入れる。ほかの設定は触らない。下の表のとおりになっているか見る
  4. Blenderファイル名を付けて書き出す。例 mycar.obj
  5. ファイルできた .obj と .mtl を、両方 assets/mypack/models/entity/ に置く。

これで、見た目の JSON(6 章)の body.model から指せる車体ができます。

  1. BlenderSelect the whole body (A). The gauge is not selected
  2. BlenderOpen File → Export → Wavefront (.obj).
  3. BlenderTick Selected Only in the right-hand panel. Don't touch anything else. Check it matches the table below
  4. BlenderName the file and export. For example mycar.obj
  5. FilePut both the .obj and the .mtl in assets/mypack/models/entity/.

You now have a body that body.model in the look JSON (chapter 6) can point at.

書き出しの設定

Export settings

項目どうする
Selected Only
(古い版では Selection Only)
入れる(ゲージを書き出さないため)
Forward Axis / Up Axis触らない(−Z / Y のまま)
Apply Modifiers触らない(入ったまま)。ミラーモディファイアがこれで適用される
Triangulated Mesh
(古い版では Triangulate Faces)
触らない(入れない)。四角形のままのほうが軽い
マテリアルの「書き出し」触らない(入ったまま)。マテリアルの名前と色が .mtl に入る
SettingDo this
Selected Only
(older versions: Selection Only)
Tick it (keeps the gauge out)
Forward Axis / Up AxisLeave alone (−Z / Y)
Apply ModifiersLeave alone (on). This applies the mirror modifier
Triangulated Mesh
(older versions: Triangulate Faces)
Leave alone (off). Quads draw faster
Materials: ExportLeave alone (on). Material names and colours go into the .mtl

必要なときだけ

Only when you need it

タイヤも書き出したい

タイヤは車体とは別のファイルに書き出します(例 mywheel.obj)。設定は車体と同じです。作り方はホイールの 1 章にあります。KurumaMod のタイヤを借りるなら、書き出す必要はありません。

Export the wheel too

The wheel goes into a separate file from the body (for example mywheel.obj), with the same settings. How to build it is in chapter 1 of the Wheel guide. If you borrow KurumaMod's wheel, there is nothing to export.

.mtl は要るのか知りたい

.mtl は、マテリアルの色・ガラスの濃さ・マテリアル名で付けたライトなどの働きを運びます。どれも使っていなければ消してもかまいません。消すと全体が白(テクスチャの色そのまま)になります。

Do I need the .mtl?

The .mtl carries material colours, glass opacity, and roles given by material names (lights and so on). If you use none of those, you may delete it; everything then turns white (the texture as is).

三角形にして書き出したい・凹んだ面がある

三角形にしても描けますが、重くなるだけです。5 角形以上の面は、凹んでいても MOD が正しく割ります。全体を三角形にする必要はありません。

Triangulate on export, or the model has concave faces

Triangulating still works; it just makes the model heavier. The mod splits faces with five or more corners correctly, even concave ones. There is no need to triangulate everything.

仕組みを知りたい(なぜ Forward Axis を触ってはいけないか)

設定には −Z Forward と書いてありますが、Blender の前(−Y)は OBJ では +Z になって出てきます。この読み替えは MOD が済ませているので、既定のままで車は正しく前を向きます。

Forward Axis を変えると、前後と左右がまとめて裏返ります。車体は左右対称なので鏡像になっても気づけず、あとで「タイヤの向きだけおかしい」という形で出てきます。

How it works (why not to touch Forward Axis)

The dialog says −Z Forward, but Blender's front (−Y) actually comes out as +Z in the OBJ. The mod already accounts for that, so the defaults give a car facing the right way.

Changing Forward Axis flips front–back and left–right together. A symmetric body gives no clue it has been mirrored; it shows up later as "only the wheels point the wrong way".

うまくいかないとき
  • 前後が逆・左右が鏡像 … Forward Axis を変えた。既定(−Z / Y)へ戻して書き出し直す
  • ゲージが一緒に書き出された … Selected Only を入れ忘れた。ゲージ(gauge_)は描かれないので害はないが、入れて書き出し直す
  • 片側しかない … ミラーモディファイアが適用されていない。Apply Modifiers を入れたままにする
  • 付け替える部品(part_…)が出ない … 非表示のまま書き出した。非表示のオブジェクトは選べないので OBJ に入らない。全部表示にしてから選ぶ(パーツの 2 章)
  • マテリアルの色やガラスの濃さが出ない … .mtl を OBJ と同じ場所に置いていない
  • 面がねじれる・抜ける … 平面から大きく曲がった面か、辺が交差した面がある。Blender でその面だけ割る
When it doesn't work
  • Front and back swapped, or mirrored — Forward Axis was changed. Put it back to −Z / Y and export again
  • The gauge was exported too — Selected Only was off. Gauge objects (gauge_) are never drawn, so it is harmless, but tick it and export again
  • Only one half of the car — the mirror modifier was not applied. Keep Apply Modifiers on
  • A swappable part (part_…) never appears — it was hidden when you exported. Hidden objects cannot be selected, so they are left out of the OBJ. Unhide everything before selecting (chapter 2 of the Parts guide)
  • Material colours or glass opacity missing — the .mtl is not next to the OBJ
  • Faces twist or disappear — a face is badly non-planar or has crossing edges. Split just that face in Blender

6車をゲームに入れる(置き場所と JSON)

6Put the car in the game (files and JSON)

作ったモデルを、ゲームで走る車種にします。見本のパックをコピーして、名前と中身を入れ替えるのがいちばん早い道です。

This turns your model into a car you can drive in game. The quickest way is to copy the example pack and swap in your own names and files.

最小のカーパックを作る

Make a minimal car pack

ここでは、パックの名前を mypack、車種の名前を ae86 とします。

Here the pack is called mypack and the car ae86.

  1. ファイルcarpack/example/ をフォルダごとコピーする。
  2. ファイルkurumamod_example_carpack を、すべて mypack に置き換える。フォルダ名 2 つ(assets/ の下と data/ の下)、いちばん上のロゴ画像 kurumamod_example_carpack.png のファイル名、そしてすべてのファイルの中身(META-INF/mods.toml・META-INF/neoforge.mods.toml と、JSON の中のパス)です。使える文字は a-z・0-9・_ だけ
  3. ファイルモデルとテクスチャを置く。assets/mypack/models/entity/ae86.obj(.mtl も一緒に)と assets/mypack/textures/entity/ae86.png
  4. ファイル見た目の JSON を書く。assets/mypack/vehicles/sample.json を ae86.json に改名して、中身をこうする:
    {
      "body":  { "model": "mypack:models/entity/ae86.obj",
                 "texture": "mypack:textures/entity/ae86.png" },
      "wheel": { "model": "kurumamod:models/entity/wheel.obj",
                 "texture": "kurumamod:textures/entity/wheel.png" }
    }
  5. ファイル諸元の JSON を書く。data/mypack/cars/sample.json を ae86.json に改名して、中身をこうする(走りは8 章で詰める):
    {
      "values": { "mass": 1200.0 }
    }
  6. lang表示名を lang に書く。assets/mypack/lang/ja_jp.json と en_us.json に "car.mypack.ae86": "AE86"
  7. ファイルjar に固めて mods/ に入れる。固め方は共通の 4 章

これで、クリエイティブタブに「AE86」が並び、自分の車体で走ります。

  1. FileCopy the whole carpack/example/ folder.
  2. FileReplace every kurumamod_example_carpack with mypack. That is two folder names (under assets/ and under data/), the logo image kurumamod_example_carpack.png at the top, and the contents of every file (META-INF/mods.toml, META-INF/neoforge.mods.toml and the paths inside the JSON). Use only a-z, 0-9 and _
  3. FileAdd the model and texture: assets/mypack/models/entity/ae86.obj (with its .mtl) and assets/mypack/textures/entity/ae86.png
  4. FileWrite the looks JSON. Rename assets/mypack/vehicles/sample.json to ae86.json and make it:
    {
      "body":  { "model": "mypack:models/entity/ae86.obj",
                 "texture": "mypack:textures/entity/ae86.png" },
      "wheel": { "model": "kurumamod:models/entity/wheel.obj",
                 "texture": "kurumamod:textures/entity/wheel.png" }
    }
  5. FileWrite the spec JSON. Rename data/mypack/cars/sample.json to ae86.json and make it (tune the handling in chapter 8):
    {
      "values": { "mass": 1200.0 }
    }
  6. langAdd the display name to lang: "car.mypack.ae86": "AE86" in assets/mypack/lang/en_us.json and ja_jp.json
  7. FilePack it into a jar and put it in mods/. See chapter 4 of the Common guide

"AE86" now appears in the creative tab and drives with your body.

できあがりの形:

What you end up with:

mypack.jar
├── META-INF/mods.toml              ← Forge 1.20.1 用
├── META-INF/neoforge.mods.toml     ← NeoForge 1.21.1 用
├── pack.mcmeta
├── assets/mypack/                  ← 見た目
│   ├── models/entity/ae86.obj
│   ├── models/entity/ae86.mtl
│   ├── textures/entity/ae86.png
│   ├── vehicles/ae86.json
│   └── lang/ja_jp.json, en_us.json
└── data/mypack/                    ← 走り
    └── cars/ae86.json
mypack.jar
├── META-INF/mods.toml              <- for Forge 1.20.1
├── META-INF/neoforge.mods.toml     <- for NeoForge 1.21.1
├── pack.mcmeta
├── assets/mypack/                  <- looks
│   ├── models/entity/ae86.obj
│   ├── models/entity/ae86.mtl
│   ├── textures/entity/ae86.png
│   ├── vehicles/ae86.json
│   └── lang/en_us.json, ja_jp.json
└── data/mypack/                    <- handling
    └── cars/ae86.json

名前がずれてもエラーは出ません。車種 id mypack:ae86 から、次の 3 つが決まります。1 つでもずれると、黙って既定の姿や名前になります。

A mismatched name gives no error. The car id mypack:ae86 fixes these three names; if one is off, the car quietly gets the default body or name.

名前
諸元data/mypack/cars/ae86.json
見た目assets/mypack/vehicles/ae86.json
表示名の翻訳キーcar.mypack.ae86
Name
Specdata/mypack/cars/ae86.json
Looksassets/mypack/vehicles/ae86.json
Display-name translation keycar.mypack.ae86

必要なときだけ

Only when you need it

既定の車の見た目だけ差し替えたい(リソースパック)

新しい車種は増やさず、KurumaMod 付属の車を自分のモデルで上書きします。jar を作らずに済み、F3+T で何度でも入れ直せるので、モデルを試すのにも向いています。

  1. 次の形でフォルダを作る:
    .minecraft/resourcepacks/MyCar/
    ├── pack.mcmeta
    └── assets/kurumamod/
        ├── models/entity/car.obj      ← 自分の車体(.mtl も一緒に)
        ├── models/entity/wheel.obj    ← 自分のタイヤ
        ├── textures/entity/car.png
        └── vehicles/car.json          ← 見た目の JSON(書き方は最小のカーパックと同じ)
  2. pack.mcmeta を書く:
    {
      "pack": { "description": "MyCar", "pack_format": 15 }
    }
  3. ゲームの設定でリソースパックを有効にする

開発環境で試すときは run/resourcepacks/ に置きます。人に配るなら、最小のカーパックの形にします。

Only replace the look of the built-in car (resource pack)

Instead of adding a car, override KurumaMod's own car with your model. No jar to build, and F3+T reloads it as often as you like, so it is also handy for trying out a model.

  1. Make this folder:
    .minecraft/resourcepacks/MyCar/
    ├── pack.mcmeta
    └── assets/kurumamod/
        ├── models/entity/car.obj      <- your body (keep the .mtl with it)
        ├── models/entity/wheel.obj    <- your wheel
        ├── textures/entity/car.png
        └── vehicles/car.json          <- looks JSON (written as in the minimal car pack)
  2. Write pack.mcmeta:
    {
      "pack": { "description": "MyCar", "pack_format": 15 }
    }
  3. Enable the pack in the game's settings

In a development environment it goes in run/resourcepacks/. To hand the car to others, use the minimal car pack layout instead.

車体の大きさ・位置を合わせたい

ゲージ(1 章)にぴったり合わせて作ったなら、何も書かなくて済みます。合わせられなかったときは、見た目の JSON(assets/mypack/vehicles/ae86.json)のいちばん外側に、メッシュを実際に作った寸法を書きます。

{
  "body":  { "model": "mypack:models/entity/ae86.obj",
             "texture": "mypack:textures/entity/ae86.png" },
  "wheel": { "model": "kurumamod:models/entity/wheel.obj",
             "texture": "kurumamod:textures/entity/wheel.png" },

  "designWheelBase": 3.12,
  "designWheelRadius": 0.45,
  "designRideHeight": 0.6019
}
  • designWheelBase … メッシュの前後のホイールアーチが何 m 離れているか(既定 3.12)。5.2m で作ってしまったなら 5.2 と書けば、既定の車の大きさに縮みます
  • designWheelRadius … メッシュのタイヤが何 m の半径で作られているか(既定 0.45)
  • designRideHeight … 車体をシャシー基準面から下げる量 [m](既定 0.6019)。車体が埋まる・浮くときに直す
  • どれも「この車の寸法」ではなく「メッシュの寸法」です。実際の寸法は諸元にあり、ゲームはその比でメッシュを拡大します

あとは body の中で細かく直せます:

"body": { "model": "...", "texture": "...",
          "offset": [0.0, 0.02, 0.0],
          "scale": 1.05 }
  • offset … 車体をずらす [m]。[x, y, z] で +X 右・+Y 上・−Z 前
  • scale … 大きさの微調整。数字 1 つでも [x, y, z] でもよい。原点が地面なので上へ伸びる

大きい車にしたいときは、ここではなく諸元を変えます。ゲームの調整画面でホイールベースとトレッドを広げ、body.scale を同じ倍率にします(1.2 倍なら 3.12→3.74m、1.8→2.16m、scale 1.2)。

Make the body the right size and position

If you built exactly to the gauge (chapter 1), there is nothing to write. If not, write the sizes you actually built the mesh at at the top level of the looks JSON (assets/mypack/vehicles/ae86.json):

{
  "body":  { "model": "mypack:models/entity/ae86.obj",
             "texture": "mypack:textures/entity/ae86.png" },
  "wheel": { "model": "kurumamod:models/entity/wheel.obj",
             "texture": "kurumamod:textures/entity/wheel.png" },

  "designWheelBase": 3.12,
  "designWheelRadius": 0.45,
  "designRideHeight": 0.6019
}
  • designWheelBase — how far apart the front and rear arches are in your mesh, in m (default 3.12). If you built it at 5.2 m, write 5.2 and it shrinks to the default car's size
  • designWheelRadius — the radius your mesh's tyre was built at, in m (default 0.45)
  • designRideHeight — how far to drop the body below the chassis plane, in m (default 0.6019). Change it if the body sinks or floats
  • These describe the mesh, not the car. The car's real sizes are in the spec, and the game scales the mesh by the ratio

Then fine-tune inside body:

"body": { "model": "...", "texture": "...",
          "offset": [0.0, 0.02, 0.0],
          "scale": 1.05 }
  • offset — shift the body, in m. [x, y, z] with +X right, +Y up, −Z forward
  • scale — fine size adjustment; one number or [x, y, z]. The origin is on the ground, so it grows upward

For a bigger car, change the spec instead. Widen the wheelbase and track in the game's tuning screen, and set body.scale to the same ratio (for 1.2×: 3.12→3.74 m, 1.8→2.16 m, scale 1.2).

座席の位置を直したい

見た目の JSON のいちばん外側に seat を書きます。運転席の位置で、助手席は左右反転で自動的に置かれます。

"seat": [0.5, -0.55, 0.2]
  • [x, y, z] [m]。+X 右・+Y 上・−Z 前。既定は右ハンドル(x が正)
  • 前後(z)は前後輪の中点から、左右(x)と高さ(y)はシャシー基準面の中心から測る
  • 足元の位置で、目線ではありません。一人称の視点はここから 1.62m 上に来ます。目線で決めたいなら 1.62 を引く
  • 座面に合わせると視線が高くなり、目線に合わせると足が床下へ潜ります。どちらにするかは車ごとの好み
  • メッシュから測るときは、designWheelBase などで拡大・縮小された後の大きさで測る
Move the seat

Write seat at the top level of the looks JSON. It is the driver's seat; the passenger seat is mirrored automatically.

"seat": [0.5, -0.55, 0.2]
  • [x, y, z] in m, with +X right, +Y up, −Z forward. The default is right-hand drive (positive x)
  • Front-to-back (z) is measured from the midpoint of the axles; side (x) and height (y) from the centre of the chassis plane
  • It is where the feet go, not the eyes. The first-person camera sits 1.62 m above it; subtract 1.62 to place the eye line instead
  • Match the cushion and the view sits high; match the eye line and the feet sink through the floor. Pick per car
  • If you measure from the mesh, measure it after the scaling from designWheelBase and friends
タイヤの見た目を変えたい(自前のタイヤ・ずらす・太さ・キャンバー)

見た目の JSON の wheel に書きます。

"wheel": { "model": "mypack:models/entity/ae86_wheel.obj",
           "texture": "mypack:textures/entity/ae86_wheel.png",
           "offset": [0.03, 0.0, 0.0],
           "scale": [1.2, 1.0, 1.0],
           "camber": -2.0 }
  • model / texture … 自前のタイヤ。kurumamod: で始めれば KurumaMod のものを借りられる
  • offset … タイヤをずらす [m]。X は「外向き」(左右で向きが反転する)。X は −0.05〜0.10 に丸められる
  • scale … X が太さ(0.5〜2.5 に丸められる)。Y・Z(直径)は 1 のままにする。直径はゲームの調整画面のタイヤ半径で変える
  • camber … キャンバー角 [度]。負で上が内側。−30〜10 に丸められる。見た目だけで、グリップは変わらない

プレイヤーは換装画面で太さ・キャンバー・オフセットを変えられます。ここに書くのはその最初の値です。

Change how the wheels look (own wheel, offset, width, camber)

Write it in wheel in the looks JSON.

"wheel": { "model": "mypack:models/entity/ae86_wheel.obj",
           "texture": "mypack:textures/entity/ae86_wheel.png",
           "offset": [0.03, 0.0, 0.0],
           "scale": [1.2, 1.0, 1.0],
           "camber": -2.0 }
  • model / texture — your own wheel. Start the path with kurumamod: to borrow KurumaMod's
  • offset — shift the wheels, in m. X is "outward" (it flips between sides). X is clamped to −0.05–0.10
  • scale — X is width (clamped to 0.5–2.5). Leave Y and Z (diameter) at 1. Change the diameter with the tyre radius in the game's tuning screen
  • camber — camber in degrees; negative leans the top inward. Clamped to −30–10. Looks only; grip does not change

Players can change width, camber and offset in the parts screen; what you write here is the starting value.

見た目の JSON に書ける項目を全部見たい

置き場所は assets/<パック>/vehicles/<車>.json。書かなかった項目は既定値になります。

キー既定値意味
body.model既定の車車体の OBJ
body.texture既定の車車体のテクスチャ
body.offset[0,0,0]車体をずらす [m](+X 右・+Y 上・−Z 前)
body.scale1.0車体の大きさの微調整。数字 1 つか [x,y,z]。上へ伸びる
wheel.model既定のタイヤタイヤの OBJ
wheel.texture既定のタイヤタイヤのテクスチャ
wheel.offset[0,0,0]タイヤをずらす [m]。X は外向き(−0.05〜0.10)
wheel.scale1.0X は太さ(0.5〜2.5)。Y・Z は 1 のまま
wheel.camber0.0キャンバー角 [度](−30〜10)。見た目だけ
designWheelBase3.12メッシュのホイールアーチが何 m 離れているか
designWheelRadius0.45メッシュのタイヤが何 m の半径で作られているか
designRideHeight0.6019車体をシャシー基準面から下げる量 [m]
seat[0.5, -0.55, 0.2]運転席の位置 [m]。右ハンドル。助手席は左右反転
shadowRadius1.4影の大きさ
soundsKurumaMod の音音の差し替え(7 章)
parts名前の決まりどおり外装パーツの部品 id → 出すオブジェクト(パーツの 2 章)

走りを決める値(車重・トルクなど)はここには書けません。data/ の諸元に書きます(8 章)。

See every key in the looks JSON

The file is assets/<pack>/vehicles/<car>.json. Anything you leave out takes the default.

KeyDefaultMeaning
body.modelbuilt-in carBody OBJ
body.texturebuilt-in carBody texture
body.offset[0,0,0]Shift the body [m] (+X right, +Y up, −Z forward)
body.scale1.0Fine size adjustment; one number or [x,y,z]. Grows upward
wheel.modelbuilt-in wheelWheel OBJ
wheel.texturebuilt-in wheelWheel texture
wheel.offset[0,0,0]Shift the wheels [m]. X is outward (−0.05–0.10)
wheel.scale1.0X is width (0.5–2.5). Leave Y and Z at 1
wheel.camber0.0Camber in degrees (−30–10). Looks only
designWheelBase3.12How far apart the arches are in your mesh
designWheelRadius0.45The radius your mesh's tyre was built at
designRideHeight0.6019How far to drop the body below the chassis plane [m]
seat[0.5, -0.55, 0.2]Driver's seat [m]. Right-hand drive; the passenger seat is mirrored
shadowRadius1.4Size of the shadow
soundsKurumaMod's soundsReplace sounds (chapter 7)
partsfollows the naming ruleBody part id → objects to show (chapter 2 of the Parts guide)

Handling values (mass, torque and so on) cannot go here. They go in the spec under data/ (chapter 8).

外装パーツを付けたい・最初から付けておきたい

見た目の JSON の parts(オブジェクト名の対応)と、諸元の JSON の default_parts(初期装備)を使います。書き方はパーツの 2 章にあります。

Add body parts, or fit them from the start

Use parts in the looks JSON (object names) and default_parts in the spec JSON (default parts). See chapter 2 of the Parts guide.

名前の決まりを詳しく知りたい
  • 大文字と空白は使えない。名前空間(mypack)は a-z 0-9 _ . -、車種名はこれに / を加えたもの
  • modId は名前空間より狭く、- も . も使えない(^[a-z][a-z0-9_]{1,63}$)。外れると読み込みが Invalid modId で落ちる。区切りは _ だけにする
  • 名前空間は modId と同じにする。違っても動くが、ほかのパックとぶつかったときにどちらが読まれるか分からなくなる
  • サブフォルダは使わない。cars/toyota/ae86.json は id が mypack:toyota/ae86、翻訳キーが car.mypack.toyota/ae86 になる
  • lang を書かなければ、表示名は ae86 とそのまま出る
  • MOD 一覧に出る画像は mods.toml の logoFile で指す
Naming rules in detail
  • No uppercase, no spaces. Namespaces (mypack) allow a-z 0-9 _ . -; car names allow those plus /
  • modId is stricter: no -, no . (^[a-z][a-z0-9_]{1,63}$). Breaking that fails the load with Invalid modId. Use _ as the only separator
  • Make the namespace the same as modId. It works either way, but if two packs collide you cannot tell which one won
  • No subfolders. cars/toyota/ae86.json becomes the id mypack:toyota/ae86 and the key car.mypack.toyota/ae86
  • Without a lang entry, the display name is simply ae86
  • The image in the mod list is logoFile in mods.toml
Forge と NeoForge の両方で使いたい

見本をコピーしていれば、もうそうなっています。Forge 1.20.1 は META-INF/mods.toml だけを、NeoForge 1.21.1 は META-INF/neoforge.mods.toml だけを読むので、両方入れておけば同じ jar がどちらでも動きます。

  • 2 つの中身はほぼ同じ。違うのはローダーの版(loaderVersion)、Minecraft の版、依存の書き方(mandatory = true が type = "required")だけ
  • pack.mcmeta に "supported_formats": [15, 48] を書く。無いと 1.21.1 で互換と見なされない
Work on both Forge and NeoForge

If you copied the example, it already does. Forge 1.20.1 reads only META-INF/mods.toml and NeoForge 1.21.1 reads only META-INF/neoforge.mods.toml, so with both inside, the same jar loads on either.

  • The two files are nearly identical. Only the loader version (loaderVersion), the Minecraft version, and how dependencies are written (mandatory = true becomes type = "required") differ
  • Put "supported_formats": [15, 48] in pack.mcmeta, or 1.21.1 will not treat the pack as compatible
見本の中身を知りたい・要らないものを消したい
id何の見本か
kurumamod_example_carpack:sample車体メッシュ・テクスチャ・灯火まで自前で持つ、一通り揃った車
kurumamod_example_carpack:sample_wheel自前のメッシュを持つホイールの部品(ホイールの 2 章)
kurumamod_example_carpack:deep_dish換装画面のスライダーへ既定値を渡すホイールの部品

ホイールの部品が要らなければ、assets/mypack/car_parts/ と data/mypack/car_parts/ のファイル、wheel-sample.obj・.mtl、lang の part.… の行を消します。使わなくなった sample.obj なども消してかまいません。

隣の carpack/basic/ はプレイヤーへ配っている公式パックで、作りは同じです。出来上がったパックに何が入るかを見るのに向いています。

What is in the example, and what you can delete
IdWhat it demonstrates
kurumamod_example_carpack:sampleA complete car — its own body mesh, texture and lights
kurumamod_example_carpack:sample_wheelA wheel part with its own mesh (chapter 2 of the Wheel guide)
kurumamod_example_carpack:deep_dishA wheel part that hands defaults to the fitment sliders

If you do not want the wheel parts, delete the files in assets/mypack/car_parts/ and data/mypack/car_parts/, wheel-sample.obj and its .mtl, and the part.… lines in lang. Unused files such as sample.obj can go too.

carpack/basic/ next door is the official pack that ships to players, built the same way — a good look at what a finished pack contains.

仕組みを知りたい(なぜ見た目と走りでフォルダが分かれるのか)

assets/ はプレイヤーのゲームだけが読み、data/ はサーバーが読みます。誰も乗っていない車はサーバーが動かすので、走りを決める値は data/ に置きます。もし assets/ に置けたら、無人の車の動きが各プレイヤーのリソースパック次第になってしまいます。そのため、見た目の JSON に書けるのは見た目だけです。

jar 1 つにすれば、assets/ と data/ の両方が一緒に読まれます。

How it works (why looks and handling live in different folders)

assets/ is read only by each player's game; data/ is read by the server. The server drives cars nobody is in, so handling values belong in data/. If they could live in assets/, a driverless car would behave according to each player's resource pack. That is why the looks JSON can only describe appearance.

In a single jar, both assets/ and data/ are read together.

うまくいかないとき
  • MOD 一覧に出ない … modId に - や . を使っていないか。META-INF/ が jar の直下にあるか(共通の 4 章)
  • 車種が増えない … data/mypack/cars/ae86.json の場所と、JSON の書き間違い。ログに理由が出る
  • 走るのに姿が既定の車のまま … vehicles/ の JSON のファイル名が車種名と同じか。model の名前空間(mypack:)が合っているか
  • 表示名が ae86 のまま … lang のキーが car.mypack.ae86 になっているか
  • 車体だけ大きい・小さい … designWheelBase がメッシュの実寸か
  • 車体が埋まる・浮く … designRideHeight。メッシュの原点が地面の高さにあるか
  • タイヤが大きすぎる・小さすぎる … designWheelRadius がメッシュの実寸か
  • 調整画面で寸法を変えたらタイヤがフェンダーからはみ出した … 仕様。タイヤは諸元に合わせて動き、車体は動かない。車体も合わせるなら body.scale
  • 見た目の JSON に mass などを書いても効かない … 走りの値は data/ の諸元に書く(8 章)

ほかの症状は共通の 6 章にあります。

When it doesn't work
  • Not in the mod list — does modId contain - or .? Is META-INF/ at the top of the jar (chapter 4 of the Common guide)?
  • No new car — check where data/mypack/cars/ae86.json is, and the JSON for typos. The reason is in the log
  • It drives but wears the default body — is the vehicles/ JSON named the same as the car? Does the namespace in model (mypack:) match?
  • The display name is just ae86 — is the lang key car.mypack.ae86?
  • Only the body is too big or small — is designWheelBase the real size of your mesh?
  • The body sinks or floats — designRideHeight. Is the mesh origin at ground level?
  • Wheels too big or small — is designWheelRadius the real size of your mesh?
  • After changing sizes in the tuning screen, the wheels stick out of the fenders — expected. Wheels follow the spec; the body does not. Use body.scale to match the body
  • mass and the like in the looks JSON do nothing — handling values go in the spec under data/ (chapter 8)

More symptoms in chapter 6 of the Common guide.

7音を付ける

7Add sounds

エンジン音などを車ごとに差し替えます。書かなかった音は KurumaMod の音のままなので、この章は飛ばしてもかまいません。

Give a car its own engine note and other sounds. Anything you leave out stays KurumaMod's, so you can skip this chapter.

最小のエンジン音を付ける

Add a minimal engine sound

  1. ファイル音源を置く。assets/mypack/sounds/ae86_exhaust.ogg。OGG・モノラルで、継ぎ目なくループするもの
  2. ファイル高回転用の音源を作って、同じ場所に置く。同梱の道具を使う(Python が要る):
    pip install numpy soundfile
    python sound_tools/make_octave_up.py ae86_exhaust.ogg
    # → ae86_exhaust_high.ogg
  3. ファイル音に名前を付ける。assets/mypack/sounds.json:
    {
      "ae86_exhaust": {
        "category": "neutral",
        "subtitle": "subtitles.kurumamod.car_exhaust",
        "sounds": [{ "name": "mypack:ae86_exhaust", "attenuation_distance": 64 }]
      },
      "ae86_exhaust_high": {
        "category": "neutral",
        "subtitle": "subtitles.kurumamod.car_exhaust",
        "sounds": [{ "name": "mypack:ae86_exhaust_high", "attenuation_distance": 64 }]
      }
    }
  4. ファイル車の見た目の JSON から指す。assets/mypack/vehicles/ae86.json(6 章)のいちばん外側に、手順 3 で付けた名前を書く:
    "sounds": {
      "exhaust": "mypack:ae86_exhaust",
      "exhaust_high": "mypack:ae86_exhaust_high"
    }
  5. ゲームF3+T を押す。

これで、乗っている車のエンジン音がその場で入れ替わります。

  1. FileAdd the sound assets/mypack/sounds/ae86_exhaust.ogg: Ogg Vorbis, mono, a seamless loop
  2. FileMake the high-rpm copy and put it next to it, with the bundled tool (needs Python):
    pip install numpy soundfile
    python sound_tools/make_octave_up.py ae86_exhaust.ogg
    # → ae86_exhaust_high.ogg
  3. FileName the sounds in assets/mypack/sounds.json:
    {
      "ae86_exhaust": {
        "category": "neutral",
        "subtitle": "subtitles.kurumamod.car_exhaust",
        "sounds": [{ "name": "mypack:ae86_exhaust", "attenuation_distance": 64 }]
      },
      "ae86_exhaust_high": {
        "category": "neutral",
        "subtitle": "subtitles.kurumamod.car_exhaust",
        "sounds": [{ "name": "mypack:ae86_exhaust_high", "attenuation_distance": 64 }]
      }
    }
  4. FilePoint the car's looks JSON at them. At the top level of assets/mypack/vehicles/ae86.json (chapter 6), write the names from step 3:
    "sounds": {
      "exhaust": "mypack:ae86_exhaust",
      "exhaust_high": "mypack:ae86_exhaust_high"
    }
  5. GamePress F3+T.

The car you are in switches to the new engine sound on the spot.

ほかの音も同じやり方で差し替えられます。sounds に書ける名前:

Other sounds are replaced the same way. Names you can use in sounds:

名前音鳴り方
exhaustエンジン音(低〜中回転)ループ。回転数で音程、アクセルで音量が変わる
exhaust_highエンジン音(高回転)ループ。exhaust を 1 オクターブ上げたもの
roadロードノイズループ。車速
wind風切り音ループ。車速
slip / slip_chatterタイヤの悲鳴(伸ばし/刻み)ループ。舗装路で滑ったとき。滑り始めの 0.6 秒だけ刻みが鳴る
gravel / sand砂利・土/砂・雪の路面音ループ。未舗装を走っているとき
turboターボの過給音(ヒュイーン)ループ。ブーストで音程と音量が上がる。ターボの部品を付けたときだけ
shift変速音1 回
crash衝突音1 回
blowoffブローオフ(プシュッ)1 回。ブーストが掛かった状態でアクセルを抜いたときとシフトアップのとき。ブローオフバルブの部品を付けたときだけ
NameSoundHow it plays
exhaustEngine (low to mid rpm)Loop. Pitch follows rpm, volume follows throttle
exhaust_highEngine (high rpm)Loop. exhaust shifted up one octave
roadRoad noiseLoop. Speed
windWindLoop. Speed
slip / slip_chatterTyre squeal (sustained / chatter)Loop. Sliding on tarmac; the chatter plays for the first 0.6 s of a slide
gravel / sandGravel & dirt / sand & snowLoop. Driving on loose ground
turboTurbo spool whistleLoop. Pitch and volume rise with boost. Only with a turbo part fitted
shiftGear changeOne-shot
crashImpactOne-shot
blowoffBlow-off valveOne-shot. On a throttle lift or upshift under boost. Only with a blow-off valve part fitted

必要なときだけ

Only when you need it

音源をうまく作りたい
  • OGG Vorbis のモノラルにする。Audacity なら「トラック → ミックス → ステレオをモノラルにミックスダウン」してから OGG で書き出す
  • ループ音は末尾を先頭へクロスフェードして、継ぎ目を消す。長さは 1 秒ほどあれば十分。短すぎると繰り返しが耳につく
  • 音量は一定にする。ゲームがアクセルや車速で音量を動かすので、素材の中の強弱は二重に掛かって「うねる」
  • エンジン音は少し高めに作る。アイドルで元の 0.65 倍、レブで約 3.9 倍の音程で鳴る。実車のアイドリングをそのまま使うと低すぎる
Make good source audio
  • Ogg Vorbis, mono. In Audacity: Tracks → Mix → Mix Stereo Down to Mono, then export as OGG
  • Cross-fade the tail of a loop into its head so there is no seam. About a second is plenty; much shorter and the repetition becomes audible
  • Keep the level steady. The game drives volume from throttle and speed, so any swell inside the file is applied twice and the sound "wobbles"
  • Build the engine a little high. It plays at 0.65× the original pitch at idle and about 3.9× at the redline; a straight recording of a real idle ends up too low
音の届く距離や字幕を変えたい
  • attenuation_distance … 音が届く距離 [ブロック]。書かなければ 16。KurumaMod はエンジン音 64・スキール 48・ロードノイズ 32
  • subtitle … 字幕の翻訳キー。KurumaMod のもの(subtitles.kurumamod.car_exhaust など)をそのまま借りられる。自分の lang に書いたキーでもよい
  • "name" は sounds/ からのパスで、拡張子を付けない
Change how far a sound carries, or its subtitle
  • attenuation_distance — how far it carries, in blocks (16 if left out). KurumaMod uses 64 for the engine, 48 for squeal, 32 for road noise
  • subtitle — the subtitle's translation key. You can borrow KurumaMod's (subtitles.kurumamod.car_exhaust and so on) or use one from your own lang
  • "name" is the path under sounds/, without the extension
ターボやブローオフの音を変えたい

sounds に "turbo" / "blowoff" を書きます。変わるのは音だけです。鳴るかどうかは、その車にターボやブローオフバルブの部品が付いているかで決まります(パーツの 1 章)。

Change the turbo or blow-off sound

Write "turbo" / "blowoff" in sounds. Only the sound changes. Whether it plays depends on the car having a turbo or blow-off valve part fitted (chapter 1 of the Parts guide).

仕組みを知りたい(なぜ高回転用の音源が要るのか)

Minecraft は音程を 0.5〜2.0 倍までしか変えられません。1 つの音源ではレブまで音程が上がりきらないので、1 オクターブ上の音源を exhaust_high として並べ、回転に合わせて 2 つを入れ替えています。

make_octave_up.py は長さを半分にして 1 オクターブ上げます。ループはループのまま出てきます(継ぎ目は増えません)。ステレオを渡してもモノラルにして書きます。

How it works (why a high-rpm sound is needed)

Minecraft can only shift pitch between 0.5× and 2.0×, so one file cannot climb all the way to the redline. The game plays a one-octave-up copy as exhaust_high and cross-fades between the two with rpm.

make_octave_up.py halves the length to go up an octave. A seamless loop comes out seamless, and stereo input is written as mono.

うまくいかないとき
  • 鳴らない … mp3 や wav になっていないか(OGG だけ鳴る)。"name" に拡張子を付けていないか
  • いつもの音のまま … sounds に書いた名前が sounds.json に無い。ログに警告が 1 行出ている。直したら F3+T
  • 離れても音が小さくならない … 音源がステレオ。モノラルにする
  • 音がうねる … 音源の中で音量が揺れている。一定にする
  • レブ付近で音程が上がりきらない … exhaust_high を書いていない。書かないと高回転側にも同じ音源を使い、音程が 2 倍で頭打ちになる
When it doesn't work
  • No sound — is it MP3 or WAV? Only OGG plays. Did you put the extension in "name"?
  • Still the usual sound — the name in sounds is missing from sounds.json. A warning is in the log. Press F3+T after fixing
  • It stays loud far away — the file is stereo. Make it mono
  • The sound wobbles — the level swells inside the file. Keep it steady
  • The pitch stops rising near the redline — exhaust_high is missing. Without it the same file plays on the high side, and the pitch caps at 2×

8諸元(走り)を書く

8Write the spec (how it drives)

加速・ブレーキ・曲がりかたを決める値(諸元)を書きます。置き場所は data/mypack/cars/<車>.json です。

This sets the values that decide acceleration, braking and cornering (the spec). They go in data/mypack/cars/<car>.json.

最小の諸元を作る

Make a minimal spec

  1. ゲーム車に乗り、G で調整画面を開いて、走りを詰める。
  2. ゲーム「プリセット」から名前を付けて保存する。
  3. ファイルconfig/kurumamod-setups.json を開き、付けた名前の { … } の中身をコピーする。中に "parts": { … } があれば、そこは除く
  4. ファイルdata/mypack/cars/ae86.json の values に貼る。
    {
      "order": 10,
      "values": {
        "mass": 1500.0,
        "peak_torque": 200.0,
        "peak_torque_rpm": 3200.0,
        "redline_rpm": 5600.0
      }
    }
  5. ゲーム/reload を打つ。(F3+T ではない)

これで、クリエイティブタブから出したその車が、調整画面で詰めたとおりに走ります。

  1. GameGet in a car, press G to open the tuning screen, and dial in the handling.
  2. GameSave it under a name from "Preset".
  3. FileOpen config/kurumamod-setups.json and copy what is inside the { … } under your name. If there is a "parts": { … } inside, leave that out
  4. FilePaste it into values in data/mypack/cars/ae86.json.
    {
      "order": 10,
      "values": {
        "mass": 1500.0,
        "peak_torque": 200.0,
        "peak_torque_rpm": 3200.0,
        "redline_rpm": 5600.0
      }
    }
  5. GameRun /reload. (Not F3+T.)

The car, taken fresh from the creative tab, now drives the way you tuned it.

必要なときだけ

Only when you need it

変えたい項目だけ書きたい

書かなかった項目は既定値になります。既定の車から変えたいところだけ残せば十分です。KurumaMod の項目が増えても、古いパックはそのまま読めます。

  • 書ける項目の全リストは付録 A
  • 書いても読まれない値(車重などから自動で決まるもの)は付録 B
  • values を使わず、いちばん外側に直接書いてもよい
Write only what you change

Anything you leave out takes the default, so keep only what differs from the default car. Old packs keep loading when KurumaMod adds parameters.

  • Every key is listed in Appendix A
  • Values that are ignored even if written (they follow from mass and the like) are in Appendix B
  • You may skip values and write the keys at the top level instead
手で数字を書きたい(単位)

ファイルには内部単位で書きます。角度はラジアンです。調整画面が度で見せている項目でも同じです。

種類単位
長さm(cm ではない)
質量kg
角度rad(度ではない)
バネ定数N/m
トルクN·m
回転数rpm
  • 例: 最大切れ角 35 度は "max_steer": 0.6109。32.0 と書くと 32 ラジアンと読まれる
  • 調整画面の範囲から外れた値は、範囲の端に丸められる(ログに警告が出る)
Type the numbers by hand (units)

The file takes internal units. Angles are radians, even for parameters the tuning screen shows in degrees.

QuantityUnit
Lengthm (not cm)
Masskg
Anglerad (not degrees)
Spring rateN/m
TorqueN·m
Engine speedrpm
  • Example: 35° of steering lock is "max_steer": 0.6109. Writing 32.0 is read as 32 radians
  • Values outside the tuning screen's range are clamped to the nearest end (the log warns you)
メモを残したい

_ で始まるキーは読み飛ばされます。JSON にはコメントが書けないので、これで理由を残せます。

{
  "values": {
    "_comment_mass": "バンなので既定より重くする",
    "mass": 1500.0
  }
}
Leave notes

Keys starting with _ are skipped. JSON has no comments, so this is how you leave a note.

{
  "values": {
    "_comment_mass": "A van, so heavier than the default",
    "mass": 1500.0
  }
}
クリエイティブタブでの並び順を変えたい

いちばん外側の order で決まります。小さいほど前(既定 100)。

Change the order in the creative tab

Set order at the top level. Smaller comes first (default 100).

最初から部品を付けておきたい

いちばん外側の default_parts に書きます(values と同じ階層)。書き方はパーツの 2 章にあります。

Fit parts from the start

Write default_parts at the top level, next to values. See chapter 2 of the Parts guide.

うまくいかないとき
  • 直したのに走りが変わらない … /reload を打ったか。すでに置いてある車は置いたときの諸元のまま。クリエイティブタブから出し直す
  • その車種がタブから消えた … JSON が壊れている。values に "parts" のような数でないものが混ざっていないか。理由はログに出る
  • 舵が異常に切れる・効かない … 角度を度で書いていないか(ラジアンで書く)
  • 書いた値が効かない … 車重などから自動で決まる値かもしれない(付録 B)。見た目の JSON(assets/)に書いていないか
When it doesn't work
  • An edit changes nothing — did you run /reload? A car already placed keeps the spec it was placed with; take a fresh one from the creative tab
  • The car vanished from the tab — the JSON is broken. Is something that is not a number, like "parts", inside values? The reason is in the log
  • Steering is wild or dead — did you write an angle in degrees? Use radians
  • A value has no effect — it may be one that follows from mass and the like (Appendix B). Or did you put it in the looks JSON under assets/?

2ホイールを部品にする

2Make a wheel a part

作ったホイールを、ゲームの換装画面で選べるようにします。見た目だけの部品で、走りは変わりません。

Make your wheel selectable in the in-game parts screen. It changes the looks only; driving stays the same.

最小のホイール部品を作る

Make a minimal wheel part

  1. Blenderホイールのモデルを作って置く。作り方は 1 章。ここでは assets/mypack/models/entity/my_wheel.obj と assets/mypack/textures/entity/my_wheel.png に置いたとする
  2. ファイル部品のファイルを置く。data/mypack/car_parts/my_wheel.json(ファイル名が部品名):
    { "slot": "wheel" }
  3. ファイル見た目のファイルを置く。assets/mypack/car_parts/my_wheel.json(部品と同じファイル名)。designRadius は作った半径(ゲージどおりなら 0.45):
    {
      "wheel": {
        "model": "mypack:models/entity/my_wheel.obj",
        "texture": "mypack:textures/entity/my_wheel.png",
        "designRadius": 0.45
      }
    }
  4. lang表示名を lang に書く。"part.mypack.my_wheel": "マイホイール"

これで、ゲームの G →「パーツ」→「ホイール」のタブに並びます。

  1. BlenderBuild the wheel model and put it in your pack. See chapter 1. Here it is at assets/mypack/models/entity/my_wheel.obj and assets/mypack/textures/entity/my_wheel.png
  2. FileAdd the part file data/mypack/car_parts/my_wheel.json (the file name is the part name):
    { "slot": "wheel" }
  3. FileAdd the looks file assets/mypack/car_parts/my_wheel.json (same file name as the part). designRadius is the radius you built at (0.45 if you followed the gauge):
    {
      "wheel": {
        "model": "mypack:models/entity/my_wheel.obj",
        "texture": "mypack:textures/entity/my_wheel.png",
        "designRadius": 0.45
      }
    }
  4. langAdd the display name to lang. "part.mypack.my_wheel": "My Wheels"

It now appears under G → "Parts" → the "Wheels" tab.

見本パックの sample_wheel が、この形そのものです。

The example pack's sample_wheel is exactly this setup.

必要なときだけ

Only when you need it

オフセット・キャンバー・太さの最初の値を決めたい

見た目のファイル assets/mypack/car_parts/my_wheel.json の wheel に書きます。換装画面のスライダーの最初の位置になり、プレイヤーが「R」を押すとここへ戻ります。

{
  "wheel": {
    "model": "mypack:models/entity/my_wheel.obj",
    "texture": "mypack:textures/entity/my_wheel.png",
    "designRadius": 0.45,
    "offset": [0.02, 0.0, 0.0],
    "scale": [1.3, 1.0, 1.0],
    "camber": -4.0
  }
}
  • offset … X だけ使う。外へ出す量 [m](−0.05〜0.10)
  • scale … X だけ使う。太さの倍率(0.5〜2.5)。Y・Z は 1.0 のままにする(変えると接地が崩れる)
  • camber … キャンバー角 [度]。負で上が内側(−30〜10)
  • 範囲の外に書いた値は、端に丸めて読む
  • 書かなかった項目は、その車のホイールの値になる
Set the starting offset, camber and width

Write them under wheel in the looks file assets/mypack/car_parts/my_wheel.json. They become where the parts-screen sliders start, and "R" returns to them.

{
  "wheel": {
    "model": "mypack:models/entity/my_wheel.obj",
    "texture": "mypack:textures/entity/my_wheel.png",
    "designRadius": 0.45,
    "offset": [0.02, 0.0, 0.0],
    "scale": [1.3, 1.0, 1.0],
    "camber": -4.0
  }
}
  • offset — only X is used: how far out to push the wheel [m] (−0.05 to 0.10)
  • scale — only X is used: width multiplier (0.5 to 2.5). Leave Y and Z at 1.0 (changing them breaks ground contact)
  • camber — camber in degrees. Negative leans the top inward (−30 to 10)
  • Values outside the range are clamped to the nearest end
  • Anything you leave out takes the car's own wheel value
メッシュを作らず、角度や太さだけ変えた部品にしたい

model と texture を書かなければ、その車のホイールのまま、書いた値だけが変わります。見本パックの deep_dish がこの形です。assets/mypack/car_parts/deep_dish.json:

{
  "wheel": {
    "scale": [1.6, 1.0, 1.0],
    "camber": -12.0
  }
}

ただし、スライダーで作れる状態に名前を付けるだけになるので、ふつうはメッシュを持つホイールを作ります。

A part with no mesh, only a different angle or width

Leave out model and texture; the car's own wheel is kept and only the values you write change. The example pack's deep_dish works this way. assets/mypack/car_parts/deep_dish.json:

{
  "wheel": {
    "scale": [1.6, 1.0, 1.0],
    "camber": -12.0
  }
}

This only names something players can already make with the sliders, so usually you would build a wheel with its own mesh.

決まった車種にだけ付けたい

data/mypack/car_parts/my_wheel.json の cars に車種の id を並べます。その車種の換装画面にだけ並びます。別のパックの車種を書いてもかまいません(kurumamod:car は KurumaMod の既定の車)。

{
  "slot": "wheel",
  "cars": ["mypack:kei", "mypack:kei_van"]
}
Only fit certain cars

List car ids in cars in data/mypack/car_parts/my_wheel.json. The part then appears only in those cars' parts screen. Cars from other packs are fine (kurumamod:car is KurumaMod's default car).

{
  "slot": "wheel",
  "cars": ["mypack:kei", "mypack:kei_van"]
}
換装画面に並ぶ順を変えたい

data/mypack/car_parts/my_wheel.json に order を書きます。小さいほど左に並びます(書かなければ 100)。

{
  "slot": "wheel",
  "order": 10
}
Change the order in the parts screen

Add order to data/mypack/car_parts/my_wheel.json. Smaller numbers sit further left (100 if left out).

{
  "slot": "wheel",
  "order": 10
}
前後で違うホイールにしたい

いまはできません。4 輪とも同じ部品を履きます。

Different wheels front and rear

Not possible yet. All four wheels wear the same part.

うまくいかないとき
  • 換装画面に並ばない … data/ 側のファイルが無いか、slot が書かれていない(ログに出る)。cars で絞っているなら、乗っている車種が入っているか見る
  • 並ぶが、見た目が変わらない … assets/ 側のファイル名が data/ 側と違う。または "wheel": { ... } の中のキーの綴りが違う
  • 名前が my_wheel のまま出る … lang のキーが part.<パック>.<部品名> になっていない
  • 大きすぎる・小さすぎる … designRadius が作った半径になっていない
  • 付けても走りが変わらない … ホイールは見た目だけの部品。グリップを変えたいならタイヤ(3 章)
When it doesn't work
  • Not in the parts screen — the data/ file is missing, or has no slot (the log says so). If you use cars, check the car you are in is listed
  • Listed, but the looks do not change — the assets/ file name differs from the data/ one, or a key inside "wheel": { ... } is misspelt
  • The name shows as my_wheel — the lang key is not part.<pack>.<part>
  • Too big or too small — designRadius is not the radius you built at
  • Driving does not change — wheels are looks only. To change grip, make a tyre (chapter 3)

4jar に固めて配る

4Pack it into a jar and ship it

カーパックは、コードを持たない MOD の jar です。フォルダの中身を zip で固めて .jar にし、mods/ に入れます。

A car pack is a mod jar with no code in it. You zip the folder's contents, name it .jar and put it in mods/.

最小のパックを作る

Make a minimal pack

  1. ファイル見本のフォルダ carpack/example/ をコピーする。例: mypack/
  2. ファイルコピーしたフォルダの中で、中身を jar に固める。どちらか 1 つ:
    cd mypack
    jar --create --file ../mypack.jar .     # JDK があるとき
    zip -r ../mypack.jar .                  # zip があるとき
    # Windows の PowerShell(JDK が無いとき)
    cd mypack
    Compress-Archive -Path * -DestinationPath ..\mypack.zip
    Rename-Item ..\mypack.zip mypack.jar
  3. ファイルできた mypack.jar を、Minecraft の mods/ フォルダに入れる。
  4. ゲーム起動して、クリエイティブの「KurumaMod」タブを開く。

これで、タブに「サンプルカー」が並びます。この jar を土台に、中身を自分の車やパーツに置き換えていきます。

  1. FileCopy the example folder carpack/example/. For example, to mypack/
  2. FileFrom inside the copied folder, pack its contents into a jar. Use one of these:
    cd mypack
    jar --create --file ../mypack.jar .     # if you have a JDK
    zip -r ../mypack.jar .                  # if you have zip
    # Windows PowerShell (without a JDK)
    cd mypack
    Compress-Archive -Path * -DestinationPath ..\mypack.zip
    Rename-Item ..\mypack.zip mypack.jar
  3. FilePut the resulting mypack.jar into Minecraft's mods/ folder.
  4. GameStart the game and open the "KurumaMod" creative tab.

The "Sample Car" is now in the tab. Use this jar as your base and replace its contents with your own cars and parts.

META-INF/ と pack.mcmeta は jar のいちばん上に

フォルダごと固めると一段深くなり、mods/ に入れても何も起きません。必ずフォルダの中で固めます。

META-INF/ AND pack.mcmeta AT THE TOP OF THE JAR

Zipping the folder itself buries them one level down, and nothing happens. Always pack from inside the folder.

必要なときだけ

Only when you need it

自分のパックの名前にしたい

kurumamod_example_carpack を、自分のパックの名前(例 mypack)に全部置き換えます。

  1. META-INF/mods.toml と META-INF/neoforge.mods.toml の modId を変える。displayName・description・version も自分のものにする
  2. assets/kurumamod_example_carpack/ と data/kurumamod_example_carpack/ のフォルダ名を modId と同じにする
  3. JSON の中の kurumamod_example_carpack:(モデルのパス)と、lang のキー(car.kurumamod_example_carpack.sample など)も置き換える
  4. MOD 一覧の画像を変えるなら、png を差し替えて logoFile の名前を合わせる
  • modId に使えるのは a-z 0-9 _ だけ(先頭は英字)。- や . を入れると、ゲームが起動時に Invalid modId で落ちる
  • フォルダ名(名前空間)は modId と同じにする。違っても動くが、ほかのパックとぶつかったときにどちらが読まれるか分からない
  • 車種のファイル名と名前の決まりは車の 6 章
Give the pack your own name

Replace every kurumamod_example_carpack with your pack's name (e.g. mypack).

  1. Change modId in META-INF/mods.toml and META-INF/neoforge.mods.toml. Make displayName, description and version your own too
  2. Rename the folders assets/kurumamod_example_carpack/ and data/kurumamod_example_carpack/ to match modId
  3. Replace kurumamod_example_carpack: inside the JSON (model paths) and in the lang keys (car.kurumamod_example_carpack.sample and so on)
  4. For your own mod-list image, swap the png and update logoFile to its name
  • modId may only use a-z 0-9 _ (starting with a letter). A - or . crashes the game at start-up with Invalid modId
  • Make the folder name (the namespace) the same as modId. It works otherwise, but if two packs collide you cannot tell which one wins
  • Car file names and naming rules are in chapter 6 of the Car guide
ほかの人に配りたい・マルチプレイで使いたい
  • マルチプレイでは、サーバーと全員のゲームの両方に入れる。どの車があるかはサーバーが決め、姿は各プレイヤーのゲームが描く
  • jar 1 つのまま配る。リソースパックとデータパックに分けると、片方だけ入れた人には「見えるのに走らない」車になる
  • 見本の mods.toml と neoforge.mods.toml を両方残しておけば、同じ jar が Forge 1.20.1 と NeoForge 1.21.1 の両方で読まれる
  • CURSEFORGE.md と MODRINTH.md は、配布ページの説明文のひな形に使える
  • カーパックを外しても、ワールドは壊れない。知らない車は既定の車として走り、入れ直せば元に戻る
Share it, or use it in multiplayer
  • In multiplayer, install it on the server and on every player's game. The server decides which cars exist; each player's game draws them
  • Ship it as one jar. Split into a resource pack and a data pack, anyone who installs only one gets a car that shows up but will not drive
  • Keep both mods.toml and neoforge.mods.toml from the example, and the same jar loads on Forge 1.20.1 and NeoForge 1.21.1
  • CURSEFORGE.md and MODRINTH.md work as templates for your download page
  • Removing a car pack does not break a world. Unknown cars drive as the default car, and putting the pack back restores them
見本の中の要らないファイルを消したい

PACK_CREATE_GUIDE.html・CURSEFORGE.md・MODRINTH.md・modeling_tools/・sound_tools/ は、作るための説明書きと道具です。消しても、入れたままでも構いません。

見本は自由に使えます。コピーして自分のパックの土台にしてよく、表示も許諾も要りません。

Remove the files you don't need from the example

PACK_CREATE_GUIDE.html, CURSEFORGE.md, MODRINTH.md, modeling_tools/ and sound_tools/ are documentation and tools for making packs. Delete them or keep them.

The example is free to use. Copy it as the base of your own pack; no credit or permission needed.

うまくいかないとき
  • MOD 一覧に出ない … フォルダごと固めている。フォルダの中で固め直す
  • 起動時に Invalid modId で落ちる … modId に - や . や大文字がある
  • MOD 一覧には出るのに車が増えない … data/<パック>/cars/ に車種の JSON があるか見る。ほかの症状は6 章
When it doesn't work
  • Not in the mod list — you zipped the folder itself. Pack again from inside it
  • The game crashes at start-up with Invalid modId — modId has a -, a . or an uppercase letter
  • In the mod list, but no cars added — check there is a car JSON in data/<pack>/cars/. Other symptoms: chapter 6

5確認する

5Check it in game

ゲームを開いたまま、直しては読み直して見る、を繰り返します。再起動は要りません。

Keep the game running and repeat: fix, reload, look. No restart needed.

やること

What you do

  1. ゲームクリエイティブの「KurumaMod」タブから車を出して乗る。
  2. Blender直して、同じファイル名で書き出し直す。
  3. ゲーム見た目(assets/)を直したら F3+T を押す。モデル・テクスチャ・vehicles/*.json・部品の見た目・音が読み直される
  4. ゲーム走りや部品の中身(data/)を直したら /reload を打つ。諸元・部品の性能・初期装備が読み直される

これで、直したところがすぐゲームに出ます。下の表で見ていきます。

  1. GameTake a car from the "KurumaMod" creative tab and get in.
  2. BlenderFix it and export again under the same file name.
  3. GameAfter changing the looks (assets/), press F3+T. Models, textures, vehicles/*.json, part looks and sounds reload
  4. GameAfter changing driving or part contents (data/), type /reload. The spec, part performance and default parts reload

Your fix now shows up in game. Use the table below to check it.

見るところ

What to look at

何をどうやって
タイヤの位置と大きさ止まった状態で、フェンダーの中に収まっているか
車高地面に埋まっていないか、浮いていないか
大きさの追従G の調整画面でタイヤ半径を動かす。タイヤは追従し、車体は追従しない(それで正しい)
ライトL でヘッドライト。ブレーキでテール。R に入れてバックランプ
ガラス車内から外が見えるか。濃すぎないか
ミラーH のメニューで入れてから見る(既定は切)
サスブレーキで鼻先が沈むか。車体とタイヤの間隔が変わるか
パーツG →「パーツ」で付け替える。付けたものだけが出て、外すと消えるか
音アイドルからレブまで回して、音程が上がりきるか。うねらないか
WhatHow
Wheel position and sizeParked: do they sit inside the arches?
Ride heightNot sunk into the ground, not floating
ScalingChange the tyre radius in the G tuning screen. The wheels follow; the body does not (that is correct)
LightsL for headlights, brake for the tails, R for the reverse lights
GlassCan you see out from inside? Is it too dark?
MirrorsTurn them on in the H menu first (off by default)
SuspensionDoes the nose dip under braking? Does the body-to-wheel gap change?
PartsSwap them in G → "Parts". Does only the fitted one show, and vanish when removed?
SoundRev from idle to the limit. Does the pitch keep rising? Does it swell?

必要なときだけ

Only when you need it

読み込みのエラーを見たい(ログ)

ゲームのフォルダの logs/latest.log を開いて、車種を・部品・OBJ などで探します。読めなかったファイルと理由が 1 行ずつ残っています。

See loading errors (the log)

Open logs/latest.log in the game folder and search for 車種を, 部品, OBJ and so on. Each file that failed to load is listed with its reason, one line each (the messages are in Japanese).

/reload が打てない

/reload はチート(コマンド)を有効にしたワールドで使えます。使えないときは、ワールドに入り直すと data/ も読み直されます。

/reload does not work

/reload needs a world with cheats (commands) on. Otherwise, leave and re-enter the world; that reloads data/ too.

うまくいかないとき
  • 直したのに変わらない … assets/ と data/ のどちらを直したか確かめる。読み直し方が違う(上の手順 3・4)
  • jar の中を直したのに変わらない … mods/ の jar は起動時にしか読まれない。jar を作り直したら再起動する
  • そのほかの症状は6 章
When it doesn't work
  • You fixed it but nothing changed — check whether you edited assets/ or data/. They reload differently (steps 3 and 4)
  • You changed the jar but nothing changed — jars in mods/ are read only at start-up. Restart after rebuilding the jar
  • Other symptoms: chapter 6

6症状別の直しかた

6Troubleshooting

カーパックは、失敗してもエラー画面を出しません。壊れたファイルは捨てて先へ進むので、症状から探します。理由はたいてい logs/latest.log に 1 行残っています。

Car packs fail without an error screen. A broken file is dropped and loading carries on, so you work from the symptom. The reason is usually one line in logs/latest.log.

読み込み・名前

Loading and names

症状直しかた
MOD 一覧に出ないフォルダごと固めている。META-INF/mods.toml(NeoForge は neoforge.mods.toml)を jar のいちばん上に
起動時に Invalid modId で落ちるmodId を a-z 0-9 _ だけにする
車が 1 台も増えないdata/<パック>/cars/*.json を置く。ログの 車種を N 件読み込みました を見る
その 1 台だけ増えないその JSON が壊れている。理由はログに
表示名が ae86 のように出るlang のキーを car.<パック>.<車> にする
走るのに姿が既定の車のままvehicles/ の JSON のファイル名とパス、名前空間(mypack:)を車種 id に揃える
直したのに何も変わらない見た目は F3+T、data/ は /reload。リソースパックで試しているなら、有効にしたか見る(5 章)
舵が切れすぎる/効かない諸元の角度を度で書いている。ラジアンで書く
SymptomFix
Not in the mod listYou zipped the folder itself. META-INF/mods.toml (NeoForge: neoforge.mods.toml) must be at the top of the jar
Crashes at start-up with Invalid modIdUse only a-z 0-9 _ in modId
No cars added at allAdd data/<pack>/cars/*.json. Check the 車種を N 件読み込みました line in the log
Only that one car is missingThat JSON is broken. The reason is in the log
The name shows as ae86Make the lang key car.<pack>.<car>
It drives, but looks like the built-in carMatch the file name and path in vehicles/ and the namespace (mypack:) to the car id
You fixed it but nothing changedLooks: F3+T. data/: /reload. Testing with a resource pack? Check it is enabled (chapter 5)
Steering is wild, or does nothingA spec angle is in degrees. Write it in radians

形と大きさ

Shape and size

症状直しかた
車体だけ大きい/小さいdesignWheelBase をメッシュの実寸にする。微調整は body.scale
車体が地面に埋まる/浮くdesignRideHeight を見る。原点は車体の底ではなく地面の高さに
タイヤが前後にずれるdesignWheelBase を見る。ゲームで前後の荷重配分を動かしたなら、それで正しい(車体は追従しない)
タイヤが大きすぎ/小さすぎdesignWheelRadius をメッシュの実寸にする。部品のホイールなら部品の designRadius
タイヤが横倒し/転がりかたが変回転軸を X に。原点を車軸の中心に
右のタイヤだけ内側を向く左側用として作る。表を +X へ
前後が逆/左右が鏡像書き出しの Forward Axis を既定に戻す
面がねじれる/抜ける大きく曲がった面か、辺が交差した面がある。その面だけ Blender で割る
ゲージが車と一緒に書き出される描かれないので害はない。気になるなら書き出しで Selected Only を入れる
SymptomFix
Body too big / too smallSet designWheelBase to your mesh's real size. Fine-tune with body.scale
Body sunk into or floating above the groundCheck designRideHeight. The origin belongs at ground level, not the underside of the body
Wheels sit too far forward or backCheck designWheelBase. If you moved the weight distribution in game, this is correct (the body does not follow)
Wheels too big / too smallSet designWheelRadius to your mesh's real size. For a wheel part, its designRadius
Wheels lie on their side / roll oddlyMake X the spin axis. Put the origin at the axle centre
Only the right wheels face inwardBuild it as the left wheel, face towards +X
Front and back swapped / mirroredPut Forward Axis in the exporter back to the default
Faces look twisted or missingA face is badly bent or its edges cross. Split just that face in Blender
The gauge is exported with the carHarmless; it is never drawn. Tick Selected Only on export if it bothers you

色・ガラス・ライト・ミラー

Colour, glass, lights, mirrors

症状直しかた
テクスチャが暗いマテリアルの Base Color を白に(既定の 0.8 グレーのまま)
全体が真っ白.mtl が無いか、マテリアルが無い。形が正しければ問題ない
窓が透けないオブジェクト名かマテリアル名を glass で始める。.mtl を一緒に置く
マテリアルで割り当てたのに光らない/透けない書き出しの「マテリアル」→「書き出し」を入れる。名前を light_・glass・mirror_ で始める
ライトなのに透ける(役目が思ったのと違う)オブジェクト名よりマテリアル名が優先される。マテリアル名を直す。ログに …を優先します と出る
ライトを足したところが穴になるlight_ で始まる名前は light_head・light_tail・light_reverse の 3 つだけ。オブジェクト名もマテリアル名も
ミラーが映らないH で入れる。描画設定が「最高(Fabulous)」のときと、シェーダーパックを使っているときは映らない
部品の中のミラーが映らない部品の中の鏡は映らない(ふつうの面になる)。鏡は車体側に作る
左右のミラーに同じ景色が映るミラーモディファイアで 1 つにしている。左右を別のオブジェクトに
ミラーが地面ばかり映す板の角度は関係ない。鏡の位置を見る(車体の中心から 0.35m 以内はルームミラーになる)
車内が暗い車体の裏面が見えている。それで正しい
SymptomFix
Texture looks darkSet the material Base Color to white (it is still the default 0.8 grey)
Everything is whiteNo .mtl, or no material. Harmless if the shape is right
Windows are not see-throughStart the object or material name with glass. Keep the .mtl alongside
A material doesn't light up / go see-throughTick "Materials" → "Export" in the exporter. Start the name with light_, glass or mirror_
A light turns see-through (the wrong role)The material name wins over the object name. Fix the material name. The log notes it
A hole where you added a lightOnly three light_ names exist: light_head, light_tail, light_reverse — for objects and materials alike
Mirrors show nothingTurn them on with H. They do not work on the "Fabulous" graphics setting or with a shader pack
A mirror inside a part shows nothingMirrors inside parts do not reflect (they draw as plain faces). Put mirrors on the body
Both door mirrors show the same viewThey are one object via a mirror modifier. Make them separate objects
A mirror only shows the groundThe modelled angle does not matter. Check its position (within 0.35 m of the centreline it counts as the rear-view mirror)
The cabin is darkYou are seeing the back of the body faces. That is correct

パーツ

Parts

症状直しかた
換装画面に外装パーツ・マフラーのタブが出ないOBJ に part_ のオブジェクトが入っていない。非表示のまま書き出していないか、名前が part_<場所>-<部品名> か見る(パーツの 2 章)
タブはあるのに部品が並ばないdata/<パック>/car_parts/ に部品の JSON を置き、slot を書く。オブジェクト名の部品名をファイル名に揃える。cars にその車を入れる
付け替えても純正の部分が残る純正の部分が body と一体になっている。別のオブジェクトにして部品にする
初期装備を書いたら、その車ごと増えなくなったdefault_parts を values の中に書いている。values と同じ、いちばん外側に書く
初期装備が付かない場所の名前か部品の id が違う。場所の名前の間違いはログに出る
初期装備を外せない(「なし」が無い)"removable": false になっている
「ブローオフ」のタブが出ない先にターボを付ける
ホイールが換装画面に出ないdata/<パック>/car_parts/ に置き、slot を書く。cars にその車を入れる
ホイールを選んでも見た目が変わらないassets/<パック>/car_parts/ のファイル名を、data/ 側と同じにする
SymptomFix
No tab for body parts or exhausts in the parts screenThe OBJ has no part_ object. Check it was not hidden when you exported, and that it is named part_<slot>-<part> (Parts guide, chapter 2)
The tab is there but the part is not listedPut the part JSON in data/<pack>/car_parts/ with a slot. Match the part name in the object name to the file name. Include the car in cars
The stock piece stays whatever is fittedIt is merged into body. Make it a separate object and a part
After adding default parts, the whole car disappeareddefault_parts is inside values. Move it to the top level, next to values
A default part is not fittedThe slot name or the part id is wrong. A wrong slot name is logged
A default part can't be removed (no "None")It has "removable": false
No "Blow-off" tabFit a turbo first
A wheel is missing from the parts screenPut it in data/<pack>/car_parts/ with a slot. Include the car in cars
Picking a wheel changes nothingGive the file in assets/<pack>/car_parts/ the same name as the one in data/

音

Sound

症状直しかた
差し替えた音が鳴らず、いつもの音のままsounds の値を sounds.json の名前に揃える。ログに 指定されたサウンドイベントが sounds.json にありません と出る
音がまったく鳴らないogg にする(mp3・wav は鳴らない)。sounds.json の "name" に拡張子を付けない
どこにいても同じ大きさで聞こえるogg をモノラルにする
レブ付近で音程が上がりきらないexhaust_high を置く(車の 7 章)
エンジン音が周期的にうねる素材の音量を一定に均してから書き出す
SymptomFix
Your sound doesn't play; it is the usual oneMatch the value in sounds to a name in sounds.json. The log says 指定されたサウンドイベントが sounds.json にありません
No sound at allUse ogg (mp3 and wav do not play). No extension on "name" in sounds.json
Equally loud everywhereMake the ogg mono
The pitch stops rising near the redlineAdd exhaust_high (Car guide, chapter 7)
The engine swells periodicallyEven out the level in the file before exporting

7チェックリスト

7Checklists

場面ごとに、見落としやすいところを並べます。症状が出てから探すときは6 章へ。

What is easy to miss, by stage. If something is already wrong, go to chapter 6.

書き出す前(Blender)

Before exporting (in Blender)

  • ワールド原点が「地面の高さ・前後輪の中点・左右中央」にある
  • 車の前が −Y を向いている
  • フェンダーがゲージのタイヤに合っている
  • ライトの名前(オブジェクト名かマテリアル名)が light_head / light_tail / light_reverse のどれか。ほかの light_ は無い
  • レンズ面が車体から 1〜2mm 浮いている
  • 窓の名前(オブジェクト名かマテリアル名)が glass で始まる
  • 左右のドアミラーが別のオブジェクトになっている
  • マテリアルの Base Color が白
  • タイヤは別ファイル・左側用 1 つ・原点は車軸・表は +X
  • The world origin is at ground level, midway between the axles, on the centreline
  • The front of the car points along −Y
  • The arches line up with the gauge wheels
  • Light names (object or material) are light_head, light_tail or light_reverse. No other light_ exists
  • Lens faces float 1–2 mm proud of the body
  • Window names (object or material) start with glass
  • The two door mirrors are separate objects
  • Material Base Color is white
  • Wheel: separate file, left side only, origin at the axle, face towards +X

外装パーツ・マフラーを入れたとき(Blender)

If you added body parts or exhausts (in Blender)

  • 部品のオブジェクト名が part_<場所>-<部品名> で、部品名が car_parts/ のファイル名と同じ
  • 付け替える純正の部分も、body から分けて別のオブジェクトにした
  • 付け替え候補の部品を全部表示にしてから選んだ(非表示のものは書き出されない)
  • 部品の中のライトは、その面に light_ のマテリアルを割り当てた
  • Part objects are named part_<slot>-<part>, and the part name matches the file name in car_parts/
  • Stock pieces that can be swapped are split from body into their own objects
  • Every selectable part was unhidden before selecting (hidden objects are not exported)
  • Lights inside a part use a light_ material on those faces

書き出しの画面

In the export dialog

  • Selected Only を入れた(ゲージが混ざらない)
  • Triangulated Mesh を入れていない
  • Forward Axis / Up Axis を触っていない
  • 「マテリアル」の「書き出し」が入っている(既定で入っている)
  • 車体とタイヤを別のファイルに書き出した
  • .mtl も一緒に置いた
  • Selected Only ticked, so the gauge stays out
  • Triangulated Mesh left off
  • Forward Axis / Up Axis untouched
  • "Materials" → "Export" ticked (it is by default)
  • Body and wheel exported to separate files
  • The .mtl kept alongside

ゲームで見る前

Before loading it in game

  • JSON に書いたパスが、実際のファイル名と同じ
  • designWheelBase / designWheelRadius がメッシュの実寸
  • リソースパックで試すなら、ゲームで有効にした
  • 見た目を直したら F3+T、data/ を直したら /reload
  • The paths in the JSON match the actual file names
  • designWheelBase and designWheelRadius are your mesh's real sizes
  • If testing with a resource pack, it is enabled in game
  • F3+T after changing looks, /reload after changing data/

音を付けたとき

If you added sounds

  • ogg・モノラル・継ぎ目の無いループ
  • exhaust_high を sound_tools/make_octave_up.py で作って並べた
  • sounds.json の "name" に拡張子を付けていない
  • vehicles/<car>.json の sounds(マフラーなら部品の見た目の exhaust.sound)が sounds.json の名前を指している
  • Ogg, mono, seamless loops
  • exhaust_high made with sound_tools/make_octave_up.py and put alongside
  • No extension on "name" in sounds.json
  • sounds in vehicles/<car>.json (for an exhaust part, exhaust.sound in its looks JSON) points at names from sounds.json

配る前

Before you ship

  • modId が a-z 0-9 _ だけで、名前空間(フォルダ名)と同じ
  • 諸元・見た目・lang のファイル名と翻訳キーが車種 id と揃っている
  • 部品の表示名を part.<パック>.<部品名> で lang に書いた
  • default_parts を values の中ではなく、いちばん外側に書いた
  • 諸元の角度をラジアンで書いた(ゲーム内で書き出したなら問題ない)
  • META-INF/ と pack.mcmeta が jar のいちばん上にある
  • マルチプレイなら、サーバーにも入れた
  • modId uses only a-z 0-9 _ and matches the namespace (folder name)
  • Spec, looks and lang file names and translation keys all match the car id
  • Part display names are in lang as part.<pack>.<part>
  • default_parts is at the top level, not inside values
  • Spec angles are in radians (fine if you exported from in game)
  • META-INF/ and pack.mcmeta sit at the top of the jar
  • For multiplayer, installed on the server too

3タイヤを部品にする

3Make a tyre a part

ダート用・オフロード用のような、走りが変わるタイヤを作ります。タイヤはホイールとは別の部品で、路面ごとのグリップが変わります。

Make a tyre that changes how the car drives, such as a gravel or mud-terrain tyre. Tyres are a separate part from wheels, and they change grip on each surface.

最小のタイヤ部品を作る

Make a minimal tyre part

  1. ファイル部品のファイルを置く。data/mypack/car_parts/my_tire.json(ファイル名が部品名):
    {
      "slot": "tire",
      "tire": {
        "grip": { "paved": 0.90, "gravel": 1.20 }
      }
    }
  2. lang表示名を lang に書く。"part.mypack.my_tire": "マイタイヤ"

これで、ゲームの G →「パーツ」→「タイヤ」のタブに並びます。数字はノーマルタイヤに対する倍率で、この例は舗装で 0.9 倍・砂利で 1.2 倍のグリップです。見た目は KurumaMod 標準のタイヤです。

  1. FileAdd the part file data/mypack/car_parts/my_tire.json (the file name is the part name):
    {
      "slot": "tire",
      "tire": {
        "grip": { "paved": 0.90, "gravel": 1.20 }
      }
    }
  2. langAdd the display name to lang. "part.mypack.my_tire": "My Tyres"

It now appears under G → "Parts" → the "Tyres" tab. The numbers are ratios to the Normal tyre; this one has 0.9× grip on tarmac and 1.2× on gravel. It looks like KurumaMod's standard tyre.

必要なときだけ

Only when you need it

性能の数字を決めたい

書ける項目はこれで全部です。どれもノーマルタイヤに対する倍率で、書かなかったものは 1 です。

{
  "slot": "tire",
  "tire": {
    "stiffness": 0.85,
    "grip":    { "paved": 0.88, "dirt": 1.20, "gravel": 1.25, "sand": 1.10, "snow": 1.10 },
    "rolling": { "paved": 1.15 }
  }
}
  • grip … その路面でのグリップ
  • rolling … その路面での転がり抵抗。大きいほど進みにくい
  • stiffness … 舵を切ってから力が立ち上がるまでの鋭さ。ブロックの大きいタイヤほど小さくする
  • 路面の名前は paved(舗装)・dirt(土・草)・gravel(砂利)・sand(砂)・snow(雪)・ice(氷)
  • 倍率は 0.3〜3.0 に丸めて読む

同梱のタイヤの値と、既定の車での効き目(比べる目安):

stiffnessgriprolling効き目
ノーマル1すべて 1すべて 1舗装の横 G 0.93・砂利 0.62・砂 0.48
ダート0.85舗装 0.88・土 1.20・砂利 1.25・砂 1.10・雪 1.10舗装 1.15舗装 0.84・砂利 0.77・砂 0.54。砂利の制動 31.9→25.7m
オフロード0.75舗装 0.80・土 1.15・砂利 1.10・砂 1.35・雪 1.25・氷 1.05舗装 1.40・土 0.85・砂 0.70・雪 0.80舗装 0.77・砂利 0.68・砂 0.68。砂の 0-100 7.15→6.18 秒

どの路面でも強いタイヤは作らないでください。得意な路面があれば苦手な路面がある、のがタイヤを選ぶ意味です。

Choose the numbers

These are all the keys. Every number is a ratio to the Normal tyre, and anything left out is 1.

{
  "slot": "tire",
  "tire": {
    "stiffness": 0.85,
    "grip":    { "paved": 0.88, "dirt": 1.20, "gravel": 1.25, "sand": 1.10, "snow": 1.10 },
    "rolling": { "paved": 1.15 }
  }
}
  • grip — grip on that surface
  • rolling — rolling resistance on that surface. Bigger means harder to keep moving
  • stiffness — how sharply force builds once you steer. Lower it for chunky tread
  • Surface names: paved, dirt (dirt and grass), gravel, sand, snow, ice
  • Ratios are clamped to 0.3–3.0

The shipped tyres, and what they do on the default car, for reference:

stiffnessgriprollingEffect
Normal1all 1all 1lateral g 0.93 paved, 0.62 gravel, 0.48 sand
Gravel0.85paved 0.88, dirt 1.20, gravel 1.25, sand 1.10, snow 1.10paved 1.150.84 paved, 0.77 gravel, 0.54 sand. Gravel braking 31.9→25.7 m
Mud terrain0.75paved 0.80, dirt 1.15, gravel 1.10, sand 1.35, snow 1.25, ice 1.05paved 1.40, dirt 0.85, sand 0.70, snow 0.800.77 paved, 0.68 gravel, 0.68 sand. Sand 0–100 7.15→6.18 s

Please don't make a tyre that wins everywhere. A tyre that is good somewhere should be worse somewhere else; that is what makes the choice matter.

見た目(トレッドの形)も変えたい
  1. Blender でタイヤだけのメッシュを作る。原点・回転軸・表の向きはホイールと同じ(1 章)。大きさは自由
  2. OBJ とテクスチャを置く。assets/mypack/models/entity/my_tire.obj と assets/mypack/textures/entity/my_tire.png
  3. 見た目のファイルを置く。assets/mypack/car_parts/my_tire.json(部品と同じファイル名)。必ず "tire" の中に書く:
    {
      "tire": {
        "model": "mypack:models/entity/my_tire.obj",
        "texture": "mypack:textures/entity/my_tire.png"
      }
    }

内径と外径はメッシュから測るので、書かなくてかまいません。選んだタイヤは、内径がホイールのリムへ、外径が車のタイヤ半径へ来るように伸び縮みして描かれます。リムの大きいホイールほどサイドウォールが薄くなります。換装画面の「太さ」は、ホイールとタイヤに一緒に効きます。

Change the looks (tread) too
  1. Model the tyre alone in Blender. Origin, spin axis and outer face are the same as a wheel (chapter 1). Any size will do
  2. Put the OBJ and texture in your pack: assets/mypack/models/entity/my_tire.obj and assets/mypack/textures/entity/my_tire.png
  3. Add the looks file assets/mypack/car_parts/my_tire.json (same file name as the part). Always write it inside "tire":
    {
      "tire": {
        "model": "mypack:models/entity/my_tire.obj",
        "texture": "mypack:textures/entity/my_tire.png"
      }
    }

The inner and outer radii are measured from the mesh, so you need not write them. The picked tyre is stretched so its inner edge sits on the wheel's rim and its outer edge at the car's tyre radius; bigger rims get thinner sidewalls. The parts screen's Width slider acts on the wheel and tyre together.

自分のホイールで、タイヤの嵌まる位置を直したい

タイヤの内径(ビード)を置く半径は、次の順に決まります。

  1. ホイールの見た目のファイルに rimRadius(メッシュの寸法・m)が書いてあれば、その値
  2. 無ければ、ホイールに付けたタイヤ(Tire)の内径
  3. それも無ければ、リムのいちばん外側の半径の 95%

位置が合わないときは、ホイールの見た目のファイル assets/mypack/car_parts/my_wheel.json の wheel に rimRadius を書きます:

{
  "wheel": {
    "model": "mypack:models/entity/my_wheel.obj",
    "texture": "mypack:textures/entity/my_wheel.png",
    "designRadius": 0.45,
    "rimRadius": 0.33
  }
}
Fix where tyres sit on my own wheel

The radius where the tyre's inner edge (bead) sits is chosen in this order:

  1. rimRadius in the wheel's looks file, if written (mesh units, m)
  2. otherwise, the inner edge of the tyre you modelled on the wheel (Tire)
  3. otherwise, 95% of the rim's outermost radius

If tyres sit wrong, add rimRadius under wheel in the wheel's looks file assets/mypack/car_parts/my_wheel.json:

{
  "wheel": {
    "model": "mypack:models/entity/my_wheel.obj",
    "texture": "mypack:textures/entity/my_wheel.png",
    "designRadius": 0.45,
    "rimRadius": 0.33
  }
}
決まった車種にだけ付けたい・並ぶ順を変えたい

ホイールと同じく、data/mypack/car_parts/my_tire.json に cars と order を書けます(2 章)。

{
  "slot": "tire",
  "order": 30,
  "cars": ["mypack:kei"],
  "tire": { "grip": { "paved": 0.90, "gravel": 1.20 } }
}
Only fit certain cars, or change the order

As with wheels, cars and order go in data/mypack/car_parts/my_tire.json (chapter 2).

{
  "slot": "tire",
  "order": 30,
  "cars": ["mypack:kei"],
  "tire": { "grip": { "paved": 0.90, "gravel": 1.20 } }
}
うまくいかないとき
  • タブに並ぶが、走りがノーマルと同じ … "tire": { ... } が書かれていない(ログに出る)
  • 一部の路面だけ効かない … 路面の名前の綴りが違う。知らない名前はログに出て無視される
  • 見た目が KurumaMod 標準のタイヤのまま … 見た目のファイルで "tire": { ... } の中に書いていない。または assets/ 側のファイル名が data/ 側と違う
  • 選んだタイヤと、ホイールに付いていたタイヤが重なる … ホイールのタイヤのオブジェクト名が tire で始まっていない(1 章)
  • サイドウォールが厚すぎる・薄すぎる … 上の「タイヤの嵌まる位置を直したい」。それでも合わないときは、タイヤの見た目の "tire" に innerRadius / outerRadius(メッシュのタイヤの内径・外径 [m])を書く
When it doesn't work
  • Listed, but drives like Normal — "tire": { ... } is missing (the log says so)
  • Only some surfaces have no effect — a surface name is misspelt. Unknown names are logged and ignored
  • Still looks like KurumaMod's standard tyre — the looks file is not written inside "tire": { ... }, or the assets/ file name differs from the data/ one
  • The picked tyre and the wheel's own tyre overlap — the wheel's tyre object name does not start with tire (chapter 1)
  • Sidewalls too thick or too thin — see "Fix where tyres sit on my own wheel" above. If that is not enough, write innerRadius / outerRadius (the mesh tyre's inner and outer radius [m]) inside the tyre's "tire"

1ターボとブローオフバルブ

1Turbos and blow-off valves

ターボは加速が変わる部品、ブローオフバルブはアクセルを抜いたときに「プシュッ」と鳴るだけの部品です。どちらもモデルは要りません。

A turbo changes how the car accelerates; a blow-off valve only adds the "pssh" when you lift off. Neither needs a model.

最小のターボを作る

Make a minimal turbo

  1. ファイル部品のファイルを置く。data/mypack/car_parts/my_turbo.json:
    {
      "slot": "turbo",
      "turbo": { "boost": 0.5 }
    }
  2. lang表示名を lang に書く。"part.mypack.my_turbo": "マイタービン"

これで、ゲームの G →「パーツ」→「ターボ」のタブに並びます。boost は全開のときにトルクを何割増やすか(0.5 で 1.5 倍)です。

  1. FileAdd the part file data/mypack/car_parts/my_turbo.json:
    {
      "slot": "turbo",
      "turbo": { "boost": 0.5 }
    }
  2. langAdd the display name to lang. "part.mypack.my_turbo": "My Turbo"

It now appears under G → "Parts" → the "Turbo" tab. boost is how much extra torque at full boost (0.5 means 1.5×).

最小のブローオフバルブを作る

Make a minimal blow-off valve

  1. ファイル部品のファイルを置く。data/mypack/car_parts/my_bov.json:
    { "slot": "blowoff" }
  2. lang表示名を lang に書く。"part.mypack.my_bov": "マイブローオフ"

ターボを付けている車にだけ、「ブローオフ」のタブが出ます。

  1. FileAdd the part file data/mypack/car_parts/my_bov.json:
    { "slot": "blowoff" }
  2. langAdd the display name to lang. "part.mypack.my_bov": "My Blow-off"

The "Blow-off" tab only appears on a car with a turbo fitted.

必要なときだけ

Only when you need it

ターボの効き方を変えたい(立ち上がり・ターボラグ)
{
  "slot": "turbo",
  "turbo": {
    "boost": 0.50,
    "spool_from": 0.30,
    "spool_full": 0.65,
    "spool_rate": 2.0
  }
}
  • boost … 全開のときにトルクを何割増やすか(0〜1.5)
  • spool_from / spool_full … 効き始める回転と、いっぱいに効く回転。アイドルを 0、レブリミットを 1 とした割合で書く。大きいタービンほど高い回転へ寄せる
  • spool_rate … 効きが上がる速さ(0.1〜20)。小さいほどターボラグが長い
  • 書かなかった項目は、純正タービンくらいの値になる

同梱の 2 つ(比べる目安):

boostspool_fromspool_fullspool_rate既定の車の 0-160km/h
なし————11.3 秒
純正タービン0.350.220.553.08.9 秒
ビッグタービン0.700.400.781.48.0 秒
Change how the turbo behaves (spool, lag)
{
  "slot": "turbo",
  "turbo": {
    "boost": 0.50,
    "spool_from": 0.30,
    "spool_full": 0.65,
    "spool_rate": 2.0
  }
}
  • boost — extra torque at full boost (0 to 1.5)
  • spool_from / spool_full — where boost starts and where it is full, as a fraction from idle (0) to the rev limit (1). Bigger turbos sit higher
  • spool_rate — how fast boost builds (0.1 to 20). Smaller means more lag
  • Anything you leave out takes roughly stock-turbo values

The two bundled turbos, for reference:

boostspool_fromspool_fullspool_rateDefault car 0-160 km/h
None————11.3 s
Stock turbo0.350.220.553.08.9 s
Big turbo0.700.400.781.48.0 s
決まった車種にだけ付けたい

cars に車種の id を並べます(ディーゼル車専用のタービン、など)。書かなければ、どの車種にも付けられます。

{
  "slot": "turbo",
  "cars": ["mypack:prado"],
  "turbo": { "boost": 0.4 }
}
Only fit certain cars

List car ids in cars (a turbo only for a diesel, say). Leave it out and every car can fit it.

{
  "slot": "turbo",
  "cars": ["mypack:prado"],
  "turbo": { "boost": 0.4 }
}
ブローオフの音を変えたい

音は部品ではなく車の側で変えます。車の vehicles/<車>.json の sounds に "blowoff" を書きます(車の 7 章)。

Change the blow-off sound

The sound belongs to the car, not the part: set "blowoff" in sounds in the car's vehicles/<car>.json (chapter 7 of the Car guide).

うまくいかないとき
  • 「ブローオフ」のタブが出ない … ターボが付いていない。先にターボを付ける
  • ログに「ターボの部品に turbo が書かれていません」と出る … "turbo": { ... } を書く(書かないと純正タービンくらいの値になる)
  • 見た目が変わらない … ターボとブローオフは、いまは見た目を持たない(換装画面の絵とメーターの TURBO ランプだけ)
When it doesn't work
  • No "Blow-off" tab — no turbo is fitted. Fit a turbo first
  • The log says the turbo part has no turbo — add "turbo": { ... } (without it you get roughly stock-turbo values)
  • Nothing changes on the car's body — turbos and blow-off valves have no looks yet (only the parts-screen icon and the TURBO lamp on the gauges)

2外装パーツ

2Body parts

ウイング・バンパー・フェンダーなど、車体に固定される部品です。

Wings, bumpers, fenders — parts fixed to the body.

最小のパーツを作る

Make a minimal part

  1. Blender車体の .blend の中に、部品を別のオブジェクトとして作る。名前は part_<場所>-<部品名>(例 part_rear_wing-gt_wing)。場所は下の表から選ぶ
  2. Blender付け替え候補の部品を全部表示にして、車体と一緒に 1 つの OBJ に書き出す。
  3. ファイル部品のファイルを置く。data/mypack/car_parts/gt_wing.json(ファイル名が部品名):
    { "slot": "rear_wing" }
  4. lang表示名を lang に書く。"part.mypack.gt_wing": "GT ウイング"

これで、ゲームの G →「パーツ」に、その場所のタブと部品が並びます。

  1. BlenderModel the part as a separate object inside the car's .blend. Name it part_<slot>-<part> (e.g. part_rear_wing-gt_wing); pick the slot from the table below
  2. BlenderUnhide every selectable part and export them together with the body, as one OBJ.
  3. FileAdd the part file data/mypack/car_parts/gt_wing.json (the file name is the part name):
    { "slot": "rear_wing" }
  4. langAdd the display name to lang. "part.mypack.gt_wing": "GT Wing"

The slot's tab and the part now appear under G → "Parts" in game.

Four rear wing part objects overlapping inside the S15 model in Blender, all visible in the outliner
図 9. S15 の .blend。ウイングの部品 4 つ(part_rear_wing-…)が車体と同じモデルの中に重なって入っています。アウトライナーで全部を表示(目のアイコンが開いた状態)にしたまま書き出します。ゲームでは付けている 1 つだけが描かれます
Fig. 9. The S15 .blend. Four wing part objects (part_rear_wing-…) overlap inside the same model as the body. Export with all of them visible in the outliner (eye icon open); in game only the fitted one is drawn.

付ける場所(slot)

Slots (slot)

slot入るもの
front_bumperフロントバンパー、リップ、スプリッター、カナード
side_skirtサイドスカート
fenderオーバーフェンダー
rear_wingスポイラー、ウイング、ダックテール
rear_diffuserリアバンパー、ディフューザー
exhaustマフラー(3 章)
slotWhat goes there
front_bumperFront bumper, lip, splitter, canards
side_skirtSide skirts
fenderOver-fenders
rear_wingSpoiler, wing, duck tail
rear_diffuserRear bumper, diffuser
exhaustExhaust (chapter 3)

その車にオブジェクトのある部品も初期装備も無い場所は、タブが出ません。

A slot's tab only appears if the car has an object for one of its parts, or a default part.

必要なときだけ

Only when you need it

走りを変えたい(ダウンフォース aero)

効きを調整しない部品(ダックテールなど)は、数字 1 つで書きます。data/mypack/car_parts/ducktail.json:

{
  "slot": "rear_wing",
  "aero": { "rear": 0.25 }
}

換装画面の「角度」で効きを調整できる部品(GT ウイングなど)は、[最小, 最大] で書きます。前にも効かせたいときは front も書きます。data/mypack/car_parts/gt_wing.json:

{
  "slot": "rear_wing",
  "aero": {
    "rear": [0.6, 1.6],
    "front": 0.1,
    "angle": 0.4
  }
}
  • front / rear … 前と後ろを、どれだけ押し付けるか。大きいほど強い(0〜3)。1 で 200km/h のとき約 190kg
  • 目安: ウイング付きの市販車で前後合わせて 0.3〜0.6、GT 系のレーシングカーで 2〜3
  • angle … 「角度」のスライダーの最初の位置(0〜1、省略で 0.5)。角度で変わるのは走りだけで、見た目は動かない
  • 強くするほど高速コーナーは速くなるが、最高速は落ちる。空気抵抗は自動で決まるので、書く項目はない
  • 前を強くすると曲がりやすく(オーバー)、後ろを強くすると安定する(アンダー)

換装画面の右には、その部品のダウンフォースと、付けたときの配分・グリップ・最高速の目安が出ます。

Change how it drives (downforce, aero)

A part whose effect is fixed (a duck tail, say) takes a single number. data/mypack/car_parts/ducktail.json:

{
  "slot": "rear_wing",
  "aero": { "rear": 0.25 }
}

A part whose effect players can adjust with the parts screen's "Angle" slider (a GT wing, say) takes [min, max]. Add front if it should press the front too. data/mypack/car_parts/gt_wing.json:

{
  "slot": "rear_wing",
  "aero": {
    "rear": [0.6, 1.6],
    "front": 0.1,
    "angle": 0.4
  }
}
  • front / rear — how hard it presses the front and rear down. Bigger is stronger (0 to 3). 1 is about 190 kg at 200 km/h
  • Guide: 0.3–0.6 in total for a road car with a wing, 2–3 for a GT race car
  • angle — where the "Angle" slider starts (0–1, default 0.5). The angle changes driving only; the object does not move
  • More downforce makes fast corners quicker but lowers top speed. Drag follows automatically, so there is nothing to write for it
  • More at the front turns in harder (oversteer); more at the rear is more stable (understeer)

The parts screen shows the part's downforce and how balance, grip and estimated top speed change.

オブジェクトに別の名前を付けたい・1 つの部品で複数のオブジェクトを出したい

名前は part_<部品名>(例 part_gt_wing)でも通ります。どちらの決まりにも合わない名前にしたいときは、車の vehicles/<車>.json に対応を書きます。

"parts": {
  "mypack:twin_muffler": { "show": ["part_exhaust-twin", "part_exhaust-twin_tip"] }
}

show に書けるのは part_ で始まる名前だけです。

Free object names, or several objects for one part

part_<part> (e.g. part_gt_wing) works too. For any other name, map it in the car's vehicles/<car>.json:

"parts": {
  "mypack:twin_muffler": { "show": ["part_exhaust-twin", "part_exhaust-twin_tip"] }
}

Only names starting with part_ are allowed in show.

最初から付いている部品にしたい(初期装備)

車の諸元 data/mypack/cars/<車>.json の、values と同じいちばん外側に書きます。

{
  "values": { "mass": 1250 },
  "default_parts": {
    "rear_wing": "mypack:s15_spoiler",
    "exhaust": { "part": "mypack:stock_muffler", "removable": false }
  }
}
  • 換装画面の「純正」が初期装備になる。外せる初期装備のある場所には「なし」も並ぶ
  • "removable": false なら外せない。外すと穴だけ残る部品に使う
  • 置いてある車にも効く。パックで初期装備を変えれば、すでに置いた車も変わる
Have it fitted from the start (default parts)

Put them in the car's spec, data/mypack/cars/<car>.json, at the top level next to values:

{
  "values": { "mass": 1250 },
  "default_parts": {
    "rear_wing": "mypack:s15_spoiler",
    "exhaust": { "part": "mypack:stock_muffler", "removable": false }
  }
}
  • "Stock" in the parts screen becomes the default part. Slots with a removable default also get "None"
  • "removable": false means it cannot come off. Use it for parts that would leave a hole
  • It reaches cars already placed: change the default in the pack and existing cars follow
仕組みを知りたい(なぜ全部を 1 つの OBJ に入れるのか)

ゲームは、車体の OBJ の中に入っている部品のオブジェクトを、表示・非表示で切り替えているだけです。付けている部品のオブジェクトだけを描き、残りは描きません。そのため:

  • OBJ に入っていない部品は出せない。部品だけを別のファイルにして、あとから足すことはできない
  • 非表示のまま書き出したオブジェクトは OBJ に入らないので、出せない
  • 部品を 1 つ増やしたら、車体の OBJ を書き出し直す
  • ほかの人の車には、部品パックだけでは外装パーツを足せない
うまくいかないとき
  • 非表示のまま書き出さない。「選択物のみ」で書き出すと、非表示のオブジェクトは選べないので抜け落ちる
  • 純正の部品も別のオブジェクトにする。body に一体で残した部分は、付け替えても消えない
  • 部品の中の面に light_tail などのマテリアルを割り当てると、部品と一緒に光る(車の 3 章)
  • cars で付けられる車種を絞れる。表示名は part.<パック>.<部品名>
How it works (why everything goes into one OBJ)

The game only shows or hides part objects that are already inside the car's OBJ. It draws the objects of the fitted parts and skips the rest. So:

  • A part that is not in the OBJ cannot appear. You cannot ship a part as a separate file and add it later
  • An object exported while hidden is not in the OBJ, so it cannot appear either
  • Adding a part means exporting the car's OBJ again
  • A parts-only pack cannot add body parts to someone else's car
When it doesn't work
  • Don't export with objects hidden. With "Selected Only", hidden objects cannot be selected and drop out
  • Make stock pieces separate objects too. Anything left merged into body stays, whatever is fitted
  • Faces inside a part with a light_tail material light up with the part (chapter 3 of the Car guide)
  • cars limits which cars can fit it. The display name is part.<pack>.<part>

3マフラー

3Exhausts

見た目と排気音を変える部品です。走りは変わりません。

A part that changes the look and the exhaust note. Driving does not change.

最小のマフラーを作る

Make a minimal exhaust

  1. Blender車体の .blend の中に、マフラーを別のオブジェクトとして作る。名前は part_exhaust-<部品名>(例 part_exhaust-titanium)
  2. Blender付け替え候補のマフラーを全部表示にして、車体と一緒に 1 つの OBJ に書き出す。
  3. ファイル部品のファイルを置く。data/mypack/car_parts/titanium.json:
    { "slot": "exhaust" }
  4. lang表示名を lang に書く。"part.mypack.titanium": "チタンマフラー"

これで、ゲームの G →「パーツ」→「マフラー」のタブに並びます。このままでは音はその車のままです。

  1. BlenderModel the exhaust as a separate object inside the car's .blend. Name it part_exhaust-<part> (e.g. part_exhaust-titanium)
  2. BlenderUnhide every selectable exhaust and export them together with the body, as one OBJ.
  3. FileAdd the part file data/mypack/car_parts/titanium.json:
    { "slot": "exhaust" }
  4. langAdd the display name to lang. "part.mypack.titanium": "Titanium exhaust"

It now appears under G → "Parts" → the "Exhaust" tab. The sound is still the car's own.

必要なときだけ

Only when you need it

音を低く・大きくしたい

見た目の JSON を置きます。assets/mypack/car_parts/titanium.json(素性と同じファイル名):

{
  "exhaust": {
    "pitch": [0.85, 1.00],
    "volume": 1.2,
    "tone": 0.3
  }
}
  • pitch … 音の高さの倍率。1 未満で低くなる。[最小, 最大] で書くと、換装画面の「音の低さ」でその範囲を動かせる
  • volume … 音量の倍率(0〜2)
  • tone … 「音の低さ」の最初の位置(0 でいちばん高い、1 でいちばん低い。省略で 0)
  • 下げるのは 0.78 くらいまでよく効く。上げるのはほとんど効かない(甲高くしたいなら、次の「音源ごと差し替えたい」)
Make it deeper or louder

Add a looks JSON, assets/mypack/car_parts/titanium.json (same file name as the definition):

{
  "exhaust": {
    "pitch": [0.85, 1.00],
    "volume": 1.2,
    "tone": 0.3
  }
}
  • pitch — pitch multiplier; below 1 is deeper. Written as [min, max], the parts screen's "Deepness" slider moves within it
  • volume — volume multiplier (0 to 2)
  • tone — where the "Deepness" slider starts (0 = highest, 1 = lowest; default 0)
  • Going down works well to about 0.78. Going up barely works (for a high-pitched exhaust, see "Use your own sound" below)
音源ごと差し替えたい
  1. 音源を置く(OGG・モノラル、継ぎ目なくループするもの)。assets/mypack/sounds/titanium_exhaust.ogg
  2. パックの assets/mypack/sounds.json にサウンドイベントを書く:
    {
      "titanium_exhaust": {
        "sounds": [{ "name": "mypack:titanium_exhaust" }],
        "attenuation_distance": 64
      }
    }
  3. 見た目の JSON の exhaust で指す:
    {
      "exhaust": { "sound": "mypack:titanium_exhaust" }
    }

高回転まで音程を伸ばしたいときは、1 オクターブ上の音源も作って "sound_high" で指します。sound_tools/make_octave_up.py で作れます。音源の作り方の詳しいことは車の 7 章と同じです。

Use your own sound
  1. Add the sound (OGG, mono, a seamless loop): assets/mypack/sounds/titanium_exhaust.ogg
  2. Declare a sound event in your pack's assets/mypack/sounds.json:
    {
      "titanium_exhaust": {
        "sounds": [{ "name": "mypack:titanium_exhaust" }],
        "attenuation_distance": 64
      }
    }
  3. Point to it from exhaust in the looks JSON:
    {
      "exhaust": { "sound": "mypack:titanium_exhaust" }
    }

To keep the pitch rising at high revs, also make a one-octave-up copy and point "sound_high" at it; sound_tools/make_octave_up.py makes one. More on making sounds in chapter 7 of the Car guide.

純正のマフラーも付け替えられるようにしたい

純正のマフラーも別のオブジェクト(例 part_exhaust-stock)にして部品を作り、車の諸元 data/mypack/cars/<車>.json のいちばん外側で初期装備にします。外すと穴だけ残るなら、外せないようにします:

{
  "values": { ... },
  "default_parts": {
    "exhaust": { "part": "mypack:stock", "removable": false }
  }
}

初期装備の詳しいことは2 章の「最初から付いている部品にしたい」にあります。

Make the stock exhaust swappable too

Make the stock exhaust a separate object too (e.g. part_exhaust-stock), give it a part, and make it a default part at the top level of the car's spec data/mypack/cars/<car>.json. If removing it would leave just a hole, make it non-removable:

{
  "values": { ... },
  "default_parts": {
    "exhaust": { "part": "mypack:stock", "removable": false }
  }
}

More on default parts in chapter 2, "Have it fitted from the start".

うまくいかないとき
  • 「マフラー」のタブが出ない … OBJ にそのオブジェクトが入っていない。非表示のまま書き出していないか見る
  • 差し替えた音が鳴らず、いつもの音のまま … sound の名前が sounds.json に無い。ログに警告が 1 行出ている
  • pitch を 1 より大きくしても高くならない … Minecraft の音程の上限に当たっている。高い音源を sound で差し替える
When it doesn't work
  • No "Exhaust" tab — the object is not in the OBJ. Check it was not hidden when you exported
  • Your sound does not play; it is the usual one — the sound name is missing from sounds.json. A warning is in the log
  • pitch above 1 does not raise it — Minecraft's pitch ceiling. Replace the source with a higher one via sound

付録 A. 座標系

Appendix A. Axes

Blender・OBJ ファイル・ゲームで軸の意味が変わりますが、読み替えは MOD 側が済ませています。Blender 標準の向きで作り、エクスポート設定も標準のままにしておけば、この表を意識する必要はありません。

The axes mean different things in Blender, in the OBJ file and in game, but the mod already does the conversion. Model in Blender's default orientation, leave the export settings alone, and you never need this table.

前上車体の左
Blender(作業中)−Y+Z+X
OBJ ファイルの中+Z+Y+X
ゲーム内(JSON の offset など)−Z+Y−X
FrontUpCar's left
Blender (while modelling)−Y+Z+X
Inside the OBJ file+Z+Y+X
In game (JSON offset etc.)−Z+Y−X

vehicles/*.json の offset と seat はゲーム内の向き(+X 右・+Y 上・−Z 前)で書きます。Blender の向きとは前後・左右が逆なので注意してください。

offset and seat in vehicles/*.json use the in-game axes (+X right, +Y up, −Z forward). Note that both the front–back and left–right senses are reversed from Blender's.

UV も上下が逆(OBJ は下が 0・Minecraft は上が 0)ですが、こちらも読み込み時に反転しているので Blender 側で気にする必要はありません。

UVs are flipped vertically too (0 is the bottom in OBJ, the top in Minecraft), but that is also handled on load, so there is nothing to do in Blender.

付録 B. 用語

Appendix B. Glossary

ホイールベース前輪と後輪の距離。既定は 3.12m
トレッド左右輪の距離。既定は 1.80m
シャシー基準面ゲーム内で車の「位置」として扱われる高さ。既定は地面から 0.602m。車体はここから designRideHeight だけ下げて描かれます
フェンダー/タイヤハウスタイヤの上を覆っている部分。ここをゲージのタイヤに合わせます
キャンバー角タイヤの傾き。負で「上が内側」。この MOD では見た目だけで、グリップには効きません
n-gon5 角形以上の面。凹んでいても MOD が読み込み時に正しく割るので、そのまま書き出してよい
UV 展開3D のメッシュに 2D の絵をどう貼るかの対応付け。しなくても走ります
マテリアルBlender 上の材質設定。この MOD が読むのは色(Base Color)と透明度(Alpha)だけです
MTLOBJ と一緒に出るマテリアルのファイル。色とガラスの濃さを運びます
名前空間mypack:models/entity/ae86.obj の mypack の部分。どのパックのファイルかを指します
WheelbaseDistance from the front axle to the rear. 3.12 m by default
TrackDistance between the left and right wheels. 1.80 m by default
Chassis planeThe height the game treats as the car's position — 0.602 m above the ground by default. The body is drawn designRideHeight below it
Wheel archThe bodywork over the tyre. Line it up with the gauge wheels
CamberHow far the wheel leans. Negative tips the top inward. Cosmetic only in this mod; it does not affect grip
n-gonA face with five or more vertices. The mod splits them correctly on load, concave or not, so export them as they are
UV unwrapThe mapping that decides how a 2D image sits on a 3D mesh. Optional — the car drives without it
MaterialBlender's surface settings. This mod reads only the Base Color and the Alpha
MTLThe material file written next to the OBJ. It carries the colours and the glass opacity
NamespaceThe mypack part of mypack:models/entity/ae86.obj — which pack the file comes from

付録 A. 諸元の全項目(data/<pack>/cars/<car>.json)

Appendix A. Every spec key (data/<pack>/cars/<car>.json)

これで全部(57 項目)。書き方は 8 章。範囲は調整画面のスライダーの範囲と同じです。外れた値は、上に外れれば上限、下に外れれば下限へ丸めて読み込み、ログに 範囲(… 〜 …)の外なので … に丸めました と残します。

That is all of them (57 keys). How to write them is in chapter 8. The ranges are the same as the tuning screen's sliders. A value above the range is loaded as the maximum and one below as the minimum, and the log records 範囲(… 〜 …)の外なので … に丸めました ("outside the range, clamped to …").

サスペンション

名前調整画面での名前単位既定範囲
strokeストロークm0.30.15 – 0.8
front_anti_rollフロント スタビライザーN/m25000 – 20000
rear_anti_rollリア スタビライザーN/m15000 – 20000
front_roll_centerフロント ロールセンター重心高に対する割合0.40 – 0.8
rear_roll_centerリア ロールセンター重心高に対する割合0.40 – 0.8

足を硬くしたいときは stroke を短くします。沈み込みがストロークの 39.2% で固定なので、短いほどバネが硬くなり、ダンパーの係数もそれに合わせて上がります。

ダンパー

名前調整画面での名前単位既定範囲
front_bump_dampingフロント 縮み側減衰減衰比0.450.1 – 1.5
front_rebound_dampingフロント 伸び側減衰減衰比0.450.1 – 1.5
rear_bump_dampingリア 縮み側減衰減衰比0.450.1 – 1.5
rear_rebound_dampingリア 伸び側減衰減衰比0.450.1 – 1.5

N·s/m ではなく減衰比(臨界減衰に対する割合)で書きます。係数はその輪のバネと荷重から KurumaMod が計算するので、stroke や mass を変えても効き方は変わりません。1 で揺り返しがちょうど出なくなる硬さ。実車は伸び側を縮み側の 1.5〜3 倍にすることが多く、そうすると段差を柔らかくいなしつつ揺れがすぐ収まります。

ステアリング ジオメトリ

名前調整画面での名前単位既定範囲
ackermannアッカーマン率割合(1 で幾何どおり)0.5−0.5 – 1.2
front_toeフロント トーrad(正でイン)0−0.00873 – 0.00873
rear_toeリア トーrad(正でイン)0−0.00873 – 0.00873
front_roll_steerフロント ロールステアrad/rad(正でアンダー)0.05−0.2 – 0.3
rear_roll_steerリア ロールステアrad/rad(正でアンダー)0.08−0.2 – 0.3
front_compliance_steerフロント コンプライアンスステアrad/G(正でアンダー)0.00873(=0.5°/G)−0.00873 – 0.0262
rear_compliance_steerリア コンプライアンスステアrad/G(正でアンダー)0.00349(=0.2°/G)−0.00873 – 0.0262

タイヤ

名前調整画面での名前単位既定範囲
frictionグリップμ10.3 – 1.5
tire_falloff滑ったときのグリップ低下割合00 – 0.5
tire_load_sensitivityタイヤの荷重感度—0.150 – 0.4
cornering_stiffness横すべり剛性—124 – 25
longitudinal_stiffness縦すべり剛性—185 – 40
wheel_radiusタイヤ半径m0.450.25 – 1.1

friction に書くのは実際の摩擦係数(μ)です。調整画面は既定を 1.00 とした相対値で出しています(いまは基準が 1.0 なので同じ数字)。

車体

名前調整画面での名前単位既定範囲
mass車重kg1200500 – 2500
weight_distribution前後の荷重配分前軸の割合0.560.35 – 0.7
wheel_baseホイールベースm3.122 – 7
track_widthトレッドm21.2 – 4

エンジン

名前調整画面での名前単位既定範囲
peak_torque最大トルクN·m35060 – 700
peak_torque_rpm最大トルク回転数rpm42001500 – 8000
peak_power_rpm最高出力回転数rpm最大トルク回転数の 1.59 倍(6676.4)2500 – 12000
idle_rpmアイドル回転数rpm800500 – 2000
redline_rpmレブリミットrpm70004000 – 12000
engine_brakeエンジンブレーキN·m350 – 120
engine_inertiaエンジンの慣性kg·m²0.250.05 – 1

変速機

名前調整画面での名前単位既定範囲
gear_count前進の段数段53 – 8
first_gear1速のギア比—4.21.5 – 5
top_gear最高段のギア比—0.850.4 – 1.5
drivetrain_efficiency駆動系の伝達効率—0.90.7 – 1
shift_time変速にかかる時間秒0.350 – 1.5
manual_transmission変速0 = AT・1 = MT00 – 1

駆動系・デフ

名前調整画面での名前単位既定範囲
drive_layout駆動方式0 = FF・1 = FR・2 = 4WD20 – 2
torque_split前後トルク配分後輪の割合(4WD のみ)0.50.1 – 0.9
diff_preloadデフ イニシャルトルクN·m00 – 300
diff_lock_ratioデフ 差動制限率—00 – 1
diff_coast_ratioデフ 戻し側の効き—0.50 – 1
center_diff_lockセンターデフ 締結の強さ—00 – 1

diff_lock_ratio と diff_preload がどちらも 0 ならオープンデフ。diff_coast_ratio は 0 で 1way、0.5 で 1.5way、1 で 2way。

torque_split と center_diff_lock は 4WD(drive_layout が 2)のときだけ効きます。torque_split は前後へ配る駆動力の割合で、後ろへ寄せるほど踏んだときに尻が出やすくなります(FR 寄り)。center_diff_lock が 0 ならオープンで配分どおり、上げると前後の回転差を揃えにいき、空転しかけた軸から掴んでいる軸へトルクが移ります(1 で直結)。締めるほど配分の意味は薄れ、低速で小さく回ったときに止まろうとします(タイトコーナーブレーキング)。サイドブレーキを引いている間は自動で切れます。古い drive_bias(0 = FF・1 = FR・間は 4WD の配分)も読めます。

ブレーキ・走行抵抗

名前調整画面での名前単位既定範囲
absABS強さ(0 で無効)0.70 – 1
rolling_resistance転がり抵抗—0.150 – 1

最高速の項目はありません。実際の最高速はトルクと抵抗から決まり、最高段でレブまで回した速度より速くは走れません。

空力

名前調整画面での名前単位既定範囲
drag_area空気抵抗(CdA)m²(Cd×前面投影面積)0.780.2 – 5
front_downforceダウンフォース(前)m²(−Cl×面積)00 – 3
rear_downforceダウンフォース(後)m²(−Cl×面積)00 – 3

空気抵抗は力として掛かるので、同じ値でも重い車ほど減速しにくくなります。目安はスポーツカー 0.5、乗用車 0.7、SUV 1.0。以前の drag(減速度の係数)を書いたパックは、その車の車重で自動的に換算され、走りは変わりません。

ダウンフォースは前軸・後軸の位置で車体を下へ押し、速度の 2 乗で増えます。前を強くするとオーバー、後ろを強くするとアンダー。押し付けるぶん空気抵抗も増える(ダウンフォースの 1/6 が CdA に足される)ので、付けるほど最高速は落ちます。目安はウイング付きの市販車で前後合わせて 0.3〜0.6、GT 系のレーシングカーで 2〜3。

操作と補助

名前調整画面での名前単位既定範囲
max_steer最大切れ角rad0.6109(=35°)0.1745 – 1.1345
steer_grip_margin切れ角の余裕(大で滑らせやすい)—10.8 – 8
visual_slip_limit見た目のタイヤ角rad(0 で無効)0.7854(=45°)0 – 1.5708
steer_rate舵が入るまでの時間秒0.180 – 1
steer_return舵が中立へ戻る時間秒0.110 – 1
self_aligning舵の自己復元—(0 で中立へ戻る)00 – 1
pedal_pressペダルを踏みきる時間秒0.250 – 1
pedal_releaseペダルを戻しきる時間秒0.120 – 1
handbrake_pressサイドブレーキが効ききる時間秒00 – 1
traction_controlトラクションコントロール強さ(0 で無効)10 – 1

Suspension

NameOn the tuning screenUnitDefaultRange
strokeTravelm0.30.15 – 0.8
front_anti_rollFront anti-roll barN/m25000 – 20000
rear_anti_rollRear anti-roll barN/m15000 – 20000
front_roll_centerFront roll centrefraction of CG height0.40 – 0.8
rear_roll_centerRear roll centrefraction of CG height0.40 – 0.8

To stiffen the suspension, shorten stroke. Static sag is fixed at 39.2% of the stroke, so a shorter stroke means stiffer springs, and the damper coefficients rise with them.

Dampers

NameOn the tuning screenUnitDefaultRange
front_bump_dampingFront bump dampingdamping ratio0.450.1 – 1.5
front_rebound_dampingFront rebound dampingdamping ratio0.450.1 – 1.5
rear_bump_dampingRear bump dampingdamping ratio0.450.1 – 1.5
rear_rebound_dampingRear rebound dampingdamping ratio0.450.1 – 1.5

Write a damping ratio (a fraction of critical damping), not N·s/m. KurumaMod works out the coefficient from that wheel's spring and load, so changing stroke or mass keeps the feel the same. At 1 the car just stops bouncing back. Real cars often run rebound at 1.5–3 times bump, which soaks up bumps softly but settles quickly.

Steering geometry

NameOn the tuning screenUnitDefaultRange
ackermannAckermannfraction (1 = true Ackermann)0.5−0.5 – 1.2
front_toeFront toerad (positive = toe-in)0−0.00873 – 0.00873
rear_toeRear toerad (positive = toe-in)0−0.00873 – 0.00873
front_roll_steerFront roll steerrad/rad (positive = understeer)0.05−0.2 – 0.3
rear_roll_steerRear roll steerrad/rad (positive = understeer)0.08−0.2 – 0.3
front_compliance_steerFront compliance steerrad/G (positive = understeer)0.00873 (= 0.5°/G)−0.00873 – 0.0262
rear_compliance_steerRear compliance steerrad/G (positive = understeer)0.00349 (= 0.2°/G)−0.00873 – 0.0262

Tires

NameOn the tuning screenUnitDefaultRange
frictionGripμ10.3 – 1.5
tire_falloffGrip loss when slidingfraction00 – 0.5
tire_load_sensitivityTyre load sensitivity—0.150 – 0.4
cornering_stiffnessLateral slip stiffness—124 – 25
longitudinal_stiffnessLongitudinal slip stiffness—185 – 40
wheel_radiusTyre radiusm0.450.25 – 1.1

friction is the actual coefficient of friction (μ). The tuning screen shows it relative to the default (the reference is 1.0 for now, so the numbers match).

Chassis

NameOn the tuning screenUnitDefaultRange
massMasskg1200500 – 2500
weight_distributionWeight distributionfraction on the front axle0.560.35 – 0.7
wheel_baseWheelbasem3.122 – 7
track_widthTrack widthm21.2 – 4

Engine

NameOn the tuning screenUnitDefaultRange
peak_torquePeak torqueN·m35060 – 700
peak_torque_rpmPeak torque rpmrpm42001500 – 8000
peak_power_rpmPeak power rpmrpm1.59 × peak torque rpm (6676.4)2500 – 12000
idle_rpmIdle rpmrpm800500 – 2000
redline_rpmRedlinerpm70004000 – 12000
engine_brakeEngine brakingN·m350 – 120
engine_inertiaEngine inertiakg·m²0.250.05 – 1

Gearbox

NameOn the tuning screenUnitDefaultRange
gear_countForward gearsgears53 – 8
first_gear1st gear ratio—4.21.5 – 5
top_gearTop gear ratio—0.850.4 – 1.5
drivetrain_efficiencyDrivetrain efficiency—0.90.7 – 1
shift_timeShift times0.350 – 1.5
manual_transmissionTransmission0 = AT, 1 = MT00 – 1

Driveline & Differential

NameOn the tuning screenUnitDefaultRange
drive_layoutDrive layout0 = FWD, 1 = RWD, 2 = AWD20 – 2
torque_splitFront/rear torque splitrear share (AWD only)0.50.1 – 0.9
diff_preloadDiff preloadN·m00 – 300
diff_lock_ratioDiff lock ratio—00 – 1
diff_coast_ratioDiff coast ratio—0.50 – 1
center_diff_lockCentre diff lock—00 – 1

With diff_lock_ratio and diff_preload both at 0 it is an open diff. diff_coast_ratio is 1-way at 0, 1.5-way at 0.5, 2-way at 1.

torque_split and center_diff_lock only apply to AWD (drive_layout 2). torque_split is the share of drive sent to each axle; the more goes to the rear, the more the tail steps out on the throttle (RWD-like). With center_diff_lock at 0 the centre is open and the split holds exactly; raising it pulls the front and rear speeds together and moves torque from an axle that starts to spin to the one that still grips (1 is fully locked). The tighter it is, the less the split matters, and the car resists tight turns at low speed (tight-corner braking). It opens automatically while the handbrake is pulled. The old drive_bias (0 = FWD, 1 = RWD, anything between = AWD split) is still read.

Brakes & Resistance

NameOn the tuning screenUnitDefaultRange
absABSstrength (0 = off)0.70 – 1
rolling_resistanceRolling resistance—0.150 – 1

There is no top-speed field. The real top speed comes out of torque versus resistance, and the car can never go faster than top gear at the redline.

Aerodynamics

NameOn the tuning screenUnitDefaultRange
drag_areaDrag area (CdA)m² (Cd × frontal area)0.780.2 – 5
front_downforceFront downforcem² (−Cl × area)00 – 3
rear_downforceRear downforcem² (−Cl × area)00 – 3

Drag is applied as a force, so the same value slows a heavier car less. Rough guide: sports car 0.5, saloon 0.7, SUV 1.0. Packs that still write the old drag (a deceleration coefficient) are converted using that car's mass, so they drive exactly as before.

Downforce pushes the body down at the front and rear axles and grows with the square of speed. More at the front gives oversteer, more at the rear gives understeer. It costs drag too (one sixth of the downforce is added to CdA), so the more you add, the lower the top speed. Rough guide: 0.3–0.6 in total for a road car with a wing, 2–3 for a GT-class race car.

Controls & Aids

NameOn the tuning screenUnitDefaultRange
max_steerMax steering anglerad0.6109 (= 35°)0.1745 – 1.1345
steer_grip_marginSteering margin (higher = slides more)—10.8 – 8
visual_slip_limitVisual wheel anglerad (0 = off)0.7854 (= 45°)0 – 1.5708
steer_rateSteering lock-to-lock times0.180 – 1
steer_returnSteering return times0.110 – 1
self_aligningSelf-aligning torque— (0 = returns to centre)00 – 1
pedal_pressPedal press times0.250 – 1
pedal_releasePedal release times0.120 – 1
handbrake_pressHandbrake press times00 – 1
traction_controlTraction controlstrength (0 = off)10 – 1

付録 B. 書いても読まれない値

Appendix B. Values ignored even if you write them

他の諸元から決まる値は、書いても黙って捨てられます。KurumaMod が計算します。

Values that follow from other values are silently dropped. KurumaMod computes them.

決まるもの何から
バネ・バンプストップ・ダンパーの係数(減衰比は付録 A)mass / weight_distribution / stroke
重心高停車時の車高
慣性モーメント 3 つmass と wheel_base / track_width
車輪の慣性・登坂できる段差・終減速比wheel_radius
制動配分weight_distribution と重心高とホイールベース
ブレーキとサイドブレーキの効きfriction
変速点・バックの最高速redline_rpm とギア比
DerivedFrom
Springs, bump stops, damper coefficients (the ratios are in Appendix A)mass / weight_distribution / stroke
Centre of gravity heightStatic ride height
All three moments of inertiamass with wheel_base / track_width
Wheel inertia, climbable step, final drivewheel_radius
Brake biasweight_distribution, CG height and wheelbase
Brake and handbrake authorityfriction
Shift points, reverse top speedredline_rpm and the gear ratios

そのため「タイヤ半径を変えたらファイナルも直す」「寸法を変えたら慣性も」といった組み合わせの手直しは要りません。半径を変えればギアリングも車高も登坂力も一緒に動きます。

So there is no cross-checking to do — no "I changed the tyre radius, now fix the final drive", no "I changed the dimensions, now fix the inertia". Change the radius and the gearing, ride height and climbing ability all move with it.

付録 A. 部品の全項目

Appendix A. Every part key

素性 — data/<pack>/car_parts/<part>.json

Definition — data/<pack>/car_parts/<part>.json

キー型既定値意味
slot文字列必須付ける場所。"wheel"・"tire"・"turbo"・"blowoff"・"front_bumper"・"side_skirt"・"fender"・"rear_wing"・"rear_diffuser"・"exhaust"
order整数100換装画面に並ぶ順
cars車種 id の配列(すべての車種)付けられる車種。読める値が 1 つも無ければ、その部品は捨てられる
turbo.boost数字0.35ターボだけ。ブーストいっぱいでトルクを何割増やすか(0〜1.5)
turbo.spool_from数字0.25ターボだけ。過給が立ち上がり始める回転の割合(アイドル 0〜レブ 1)
turbo.spool_full数字0.60ターボだけ。過給がいっぱいになる回転の割合
turbo.spool_rate数字3.0ターボだけ。ブーストが上がる速さ [1/秒](0.1〜20)
tire.stiffness数字1タイヤだけ。横・縦の剛性の倍率(よれやすさ。0.3〜3.0)
tire.grip.<路面>数字1タイヤだけ。その路面でのグリップの倍率。路面は paved・dirt・gravel・sand・snow・ice
tire.rolling.<路面>数字1タイヤだけ。その路面での転がり抵抗の倍率
aero.front / aero.rear数字 or [最小, 最大]0外装パーツだけ。その軸のダウンフォースの面積 [m²](0〜3)。範囲なら角度で調整できる(パーツの 2 章)
aero.angle数字0.5外装パーツだけ。調整していないときの角度(0〜1)
KeyTypeDefaultMeaning
slotstringrequiredWhere it fits: "wheel", "tire", "turbo", "blowoff", "front_bumper", "side_skirt", "fender", "rear_wing", "rear_diffuser" or "exhaust"
orderinteger100Position in the parts screen
carsarray of car ids(every car)Which cars can fit it. If none of the values can be read, the part is dropped
turbo.boostnumber0.35Turbos only. Extra torque at full boost (0 to 1.5)
turbo.spool_fromnumber0.25Turbos only. Where boost starts to build, as a fraction from idle (0) to the rev limit (1)
turbo.spool_fullnumber0.60Turbos only. Where boost is full
turbo.spool_ratenumber3.0Turbos only. How fast boost builds [1/s] (0.1 to 20)
tire.stiffnessnumber1Tyres only. Scale on lateral and longitudinal stiffness (tread squirm; 0.3 to 3.0)
tire.grip.<surface>number1Tyres only. Grip on that surface. Surfaces: paved, dirt, gravel, sand, snow, ice
tire.rolling.<surface>number1Tyres only. Rolling resistance on that surface
aero.front / aero.rearnumber or [min, max]0Body parts only. Downforce area on that axle [m²] (0 to 3). A range is adjustable by angle (chapter 2 of the Parts guide)
aero.anglenumber0.5Body parts only. Default angle (0 to 1)

見た目 — assets/<pack>/car_parts/<part>.json("wheel": { ... } の中。入れ子を省いて、いちばん外側に書いてもよい。ホイールだけ。ターボとブローオフには要らない)

Looks — assets/<pack>/car_parts/<part>.json (inside "wheel": { ... }, or at the top level without the nesting). Wheels only; turbos and blow-off valves need none

キー型既定値意味
modelidその車種の wheel.modelホイールの OBJ
textureidその車種の wheel.textureホイールのテクスチャ
designRadius数字その車種の designWheelRadiusメッシュが何 m の半径で作られているか
offset[x,y,z]その車種の wheel.offset平行移動 [m]。X は外向き。X はオフセットのスライダーの既定値(−0.05 〜 0.10。外れたら端へ丸める)
scale数字 1 つ or [x,y,z]その車種の wheel.scaleX は太さ(スライダーの既定値。0.5 〜 2.5 に丸める)。Y・Z は触らない
camber数字その車種の wheel.camberキャンバー角 [度]。スライダーの既定値(−30 〜 10 に丸める)
rimRadius数字(測る)タイヤの内径(ビード)を置く半径 [m](メッシュの寸法)。3 章

タイヤの見た目 — assets/<pack>/car_parts/<part>.json("tire": { ... } の中。いちばん外側には書けない)

キー型既定値意味
modelidKurumaMod 標準のタイヤタイヤの OBJ(タイヤだけ。原点は車軸の中心)
textureidkurumamod:textures/entity/wheel.pngタイヤのテクスチャ
innerRadius数字(測る)メッシュのタイヤの内径 [m]。測った値がおかしいときだけ書く
outerRadius数字(測る)メッシュのタイヤの外径 [m]。同上
KeyTypeDefaultMeaning
modelidthe car's wheel.modelWheel OBJ
textureidthe car's wheel.textureWheel texture
designRadiusnumberthe car's designWheelRadiusThe radius the mesh was built at, in m
offset[x,y,z]the car's wheel.offsetTranslation [m]. X points outward; it is the offset slider's default (−0.05 to 0.10, clamped)
scaleone number or [x,y,z]the car's wheel.scaleX is width (the slider's default, clamped to 0.5–2.5). Leave Y/Z alone
cambernumberthe car's wheel.camberCamber [degrees]. The slider's default (clamped to −30 to 10)
rimRadiusnumber(measured)Radius where the tyre's bead sits [m], in mesh units. Chapter 3

Tyre looks — assets/<pack>/car_parts/<part>.json (inside "tire": { ... }; not at the top level)

KeyTypeDefaultMeaning
modelidKurumaMod's own tyreTyre OBJ (tyre only, origin at the axle centre)
textureidkurumamod:textures/entity/wheel.pngTyre texture
innerRadiusnumber(measured)The mesh's inner tyre radius [m]. Only write it if the measured one is wrong
outerRadiusnumber(measured)The mesh's outer tyre radius [m]. Likewise

マフラーの音 — assets/<pack>/car_parts/<part>.json("exhaust": { ... } の中。いちばん外側には書けない)

キー型既定値意味
pitch数字 or [最小, 最大]1音程の倍率(0.5〜1.5)。範囲なら「音の低さ」で動かせる
volume数字1音量の倍率(0〜2)
soundid(その車の音)排気音のサウンドイベント
sound_highid(無し)高回転側(1 オクターブ上)のサウンドイベント
tone数字0調整していないときの低さ(0〜1)

Exhaust sound — assets/<pack>/car_parts/<part>.json (inside "exhaust": { ... }; not at the top level)

KeyTypeDefaultMeaning
pitchnumber or [min, max]1Pitch multiplier (0.5 to 1.5). A range is adjustable with "Deepness"
volumenumber1Volume multiplier (0 to 2)
soundid(the car's)Exhaust sound event
sound_highid(none)High-rev (one octave up) sound event
tonenumber0Default deepness (0 to 1)

車の側 — 初期装備(data/<pack>/cars/<car>.json のいちばん外側)と対応(assets/<pack>/vehicles/<car>.json)

キー型意味
default_parts.<場所>部品 id or {"part": id, "removable": 真偽}何も付けていないときの部品。removable の既定は true
parts.<部品 id>.showオブジェクト名の配列その部品を付けたときに出すオブジェクト(part_ で始まる名前だけ)

On the car — default parts (top level of data/<pack>/cars/<car>.json) and mapping (assets/<pack>/vehicles/<car>.json)

KeyTypeMeaning
default_parts.<slot>part id or {"part": id, "removable": bool}The part fitted when nothing is chosen. removable defaults to true
parts.<part id>.showarray of object namesObjects shown while that part is fitted (names starting with part_ only)