描いた絵が家具とペットになる自作プラグイン「ラクガキ王国」のしくみ

この記事でわかること
- ラクガキ王国でできること(ペット・置物・家具・バトル)
- 描いた絵を「動くもの」にする表示のしくみ
- 育ち方をバトルの勝ち数から経験値に変えた理由
- 家具の種類をどう増やしていったか
マイクラで「自分の描いた絵が、そのまま動いたり座れたりしたら楽しいだろうな」と思って作ったのが、サーバー用の自作プラグイン「ラクガキ王国」です。今は、視聴者さんといっしょに街を作る参加型サーバー「ラクガキ街」の中心になっています。
上の写真は、ラクガキから作った家具だけで部屋を作ってみたところです。ネコのイス、キノコのランプ、ドラゴンのベッド、ニコニコ顔のラグ。どれもブロックを置いて描いた絵が元になっていて、イスには座れ、ベッドでは寝られます。
この記事では、ラクガキ王国が何をするプラグインで、中でどう動いているのかを、開発の順番にそって書きます。配布しているファイルとコマンドの一覧は 配布ページ にまとめてあるので、ここでは「なぜそう作ったか」を中心にします。
描く場所は「アトリエ」
ラクガキは、ふだんのワールドとは別の「アトリエ」で描きます。アトリエに入ると、ガラスの枠で囲まれたキャンバスが用意され、持ち物が描くためのブロック(羊毛など)に入れかわります。そこへ 1 個ずつブロックを置いていくと、立体のラクガキになります。
アトリエを本番のワールドとは分けたのには理由があります。描いている途中のブロックが街に残ると、片付けが大変だからです。今の作りでは、アトリエを出るときに絵を保存して、キャンバスは片付けます。ラクガキ街では、街の地下にアトリエを作り、40×40 の区画を 4 人分用意しました。保存して出ると区画が空いて、次の人が使えるようになっています。
キャンバスの中では、ペンで面に線を描き足すこともできます。下の写真は、ベッドの頭の板に金色の線を描いているところです。ブロックを置くだけだと模様が角ばってしまうので、細い線を引けるようにしました。
保存した絵は、3 つの使い道に分かれる
保存したラクガキは、メニューから次の 3 つの形で呼び出せます。
| 使い方 | どうなるか |
|---|---|
| 召喚する | ペットになってついてくる。乗って走れる。バトルにも出せる |
| 置物として置く | 絵が小さな置物になって、その場に飾られる。こわすとアイテムに戻る |
| 家具として保存 | イス・ベッド・ランプ・ドアなどの「使える家具」になる |
召喚したラクガキは、乗り物にもなります。羽を描いたラクガキなら空も飛べます。
「絵」をどうやって動かしているか
しくみをかんたんに書くと、ラクガキの体は「ブロックの見た目だけを出すもの(ブロックの表示)」をたくさん並べて作っています。キャンバスの 1 ブロックを、召喚したときは 0.25 ブロックの大きさに縮めて表示します(設定の summon.scale)。30×30×30 のキャンバスいっぱいに描いても、ペットになると 7.5 ブロック分の大きさに収まる計算です。
体を動かすのは、見えないモブです。最初は、見えないモブに体のブロックを全部「乗せて」いました。乗せておけば、モブが歩くと体もいっしょに動いてくれるので、いちばん素直な作り方です。
ところが、この「乗せる」作りは統合版(スマホやゲーム機)の人から見ると崩れてしまいました。そこから「運ぶ」作りに変え、さらにそれが Java 版で別の不具合を生んで……と、表示のしくみはこのあと何度も作り直すことになります。くわしくは次の記事に書きました。
家具は「1 ブロックに縮めて置く」
家具は、描いた絵を 1 ブロックの大きさに縮めて、そのブロックの位置に置きます。描くときは大きく、置くときはふつうのブロックと同じ大きさ、という作りです。イスなら右クリック(スマホはタップ)で座れ、ベッドなら寝られて、復活地点にもなります。ランプの家具は、置くとまわりが明るくなります。
家具の種類は、少しずつ増やしました。最初はイス・ベッド・ランプのような「使える」ものから始めて、ラクガキ街のオープン前に「強みを増やしたい」と思い、クッション・ドア・板ガラス・カーペット・屋根に使える階段を足しました。そのあと、トラップドアとハーフブロックも足しています。
「1 ブロックに縮める」決まりには弱点もありました。玉座のように背もたれが高い椅子を描いても、1 ブロックの高さに押しこまれてしまうのです。座ったときに体が埋まる・浮く問題も出ました。このあたりは 座る高さを絵から測るようにした話 にまとめています。
育ち方を「経験値」にした理由
ラクガキには「育ちレベル」があり、レベルが上がるほど大きいキャンバスと、たくさんのブロックと、体の部位(あたま・うで・あし・つばさ・つの)が使えるようになります。最初の作りでは、全 100 層のバトルタワーで勝つたびに増えていく形でした。
ラクガキ街では、これをマイクラの経験値で育つ形に変えました(設定の growth.mode: xp)。参加者の中には、バトルより建築や冒険が好きな人もいます。ふつうに遊んで拾った経験値で育つなら、どんな遊び方でも絵が大きくなっていきます。やられても育ちレベルは減りません。
| 育ちレベル | 必要な経験値の合計 | 使える部位 |
|---|---|---|
| Lv3 | — | あたま |
| Lv6 | — | うで |
| Lv10 | 200 | あし |
| Lv20 | — | つばさ |
| Lv30 | 1,200 | つの |
| Lv100 | 11,000 | キャンバス 30・ブロック 1,015 個 |
必要な経験値は「10×レベル+レベルの 2 乗」で、キャンバスの大きさは「5+レベル÷4」、使えるブロックの数は「15+8×レベル+20×(レベル÷10)」にしています。最初の数レベルはすぐ上がって、後半はじっくり、という伸び方です。
バトルは「友達と 1 対 1」に絞った
ラクガキ王国には、バトルタワー、6 文字の対戦コード、視聴者が投票で敵の行動を決める視聴者バトル、トーナメントの大会、お題を 3 分で描くお題チャレンジまで、たくさんの遊び方を入れていました。
ただ、参加型サーバーで全部を出すと、メニューが長くなりすぎて、特に小さい子が迷います。そこでラクガキ街では、メニューを「すっきり版」(menu.simple: true)にして、バトルは「友達とバトル」だけを残しました。今いる人を選んで申し込み、相手が OK すると闘技場で 1 対 1 になります。申し込みは 60 秒で切れ、OK・ことわるの返事はチャットではなく画面のボタンにしました。統合版の人でも押せるようにするためです。お題チャレンジは出していません。
外を連れ歩くペットは、強くなりすぎないように与えるダメージを 6 割、受けるダメージを 1.25 倍にしています(pet.damage-scale: 0.6、pet.toughness-scale: 0.8)。ペットが強すぎると、冒険がペット任せになってしまうからです。
作ってみてわかったこと
いちばん大きかったのは、「描いた絵がそのまま本物になる」という一点がわかりやすい、ということです。ショート動画でも、イスがポンと出て座る場面は、見ている人に何のプラグインかがすぐ伝わりました。一方で、描いたものを「本物らしく」見せるには、座る高さ、寝る高さ、ドアの開け閉めの当たり判定など、ふつうのブロックなら気にしなくていい細かいところを一つずつ合わせる必要がありました。
もう一つは、Java 版と統合版の両方で同じように見せる難しさです。同じプラグインでも、見え方のしくみがちがうので、片方で直すともう片方で崩れる、ということが何度もありました。このサイトの「プラグイン開発」の記事は、ほとんどがその記録です。
表示のしくみの話は 統合版でひし形につぶれた話 から、家具の話は 座る高さの話 と ベッドとドアの話 から読めます。