ばかおもちゃ本店:Youtube twitter:@sashimizakana Amazon.co.jpアソシエイト

2019年9月25日水曜日

DefoldでゲームデータをJSONで読み込む

ProjectのCustom Resourcesに設定したフォルダ(ないしファイル)は、sys.load_resourceで読み込める。指定するのはゲームのルートからのパス。(/assets/dataとか)jsonで書いたファイルを用意して、json.decode(読み込んだデータ)とやればそのままテーブルで取得できる。

ゲームのシナリオファイルとか作るなら、そういうJSONを出力できるツールとか書けばいいかも。なんとなくそっちに手を出すと、それに凝りすぎてプロジェクト進捗が破綻するという匂いがするのでひとまず手書きでやってるけど、システム周りがだいたい出来たらNode.jsでブラウザから作れるツールみたいなもんでも作ろうかと思う。

2019年9月24日火曜日

Defoldで日本語のテキスト周りあれこれ

Defoldでも日本語のフォントを普通に使うことができる。
otfとかttfのファイルをassetsフォルダみたいなところに入れておいてからNew>fontで.fontファイルを作成すれば、ゲーム内部で利用できるようになる。フォントの大きさとか、字詰・アルファ・影の設定とかはここでやるっぽいので、fontファイルはスタイルみたいなもんだろうと思う。複数のスタイルを使うときはその分だけ作成すれば良さそう。
注意点としてはAll Charsというチェックを入れておかないと日本語フォントは入らない。

もうちょっと文字周りのことに触れておくと、Defold自体が利用する文字エンコードは多分UTF-8っぽいのだけど、適当に読む限りLuaは単純にバイト列として読むだけなのでエンコードの変換とかは特に行われない、つまり内部文字コードみたいなものを持たないっぽい。たしかこれはRubyなんかも同じような作りだったような気がするけど詳しくないので知らない。
で、Defold使っていて、シナリオデータをJSONとかで作ったりすると、当然読み込まれた文字はUTF-8になるわけだけど、よくあるテキストボックスに文字をぺぺぺってタイプライターみたいに打っていく表現をしようと思うと、文字を一文字ずつ切り分けるということが必要になります。

当然Luaにもstring.subみたいな文字を切り出す処理があるのでそれを使うわけですが、たぶん上述のような理由でLuaは文字がどんな感じで格納されているかに関知しないので、subは指定バイト数で文字を切り出す、という仕様。
UTF-8の場合雑に言うと、英数は1バイト、アクセントとかウムラウトみたいなのついてるのは2バイト、日本語等全角文字と古い絵文字っぽいものが3バイト、昨今の絵文字とその他あれこれが4バイトみたいになっています。ちなみにそれぞれが何バイトかは文字の先頭4ビットを見ればわかる。
つまり、そのままUTF-8を利用して文字単位で切り出そうとすると、(DefoldのLua5.1の場合)そういう処理を実装する必要があるわけですが、ちょっと面倒くさかったので、先頭1バイトだけ読んで読めなければ固定で3バイト分読むという方針で実装していたところ、ツイッターで教えてもらいました。


立て続けに二人に教えてもらいました。


どっちもライセンス表記見ると同じ人が書いたっぽく、後者の方が機能が多い。

で、これを New > Lua moduleとやって、コピペしてutf8.luaみたいな名前で保存して、require 'フォルダ名.utf8'とやれば、普通に使えるようになった。

そういうわけで、Defoldの利用者には大変親切な方が多いです。

2019年9月22日日曜日

Defoldでゲームを作り出した

やりたいとずっと思っていても達成できないということはいくつもあって、何が悪いのかといえば、やはり手法が悪いと考えるほかない。自分の能力や努力に問題がある、というのだとどうしようもないから、そう考えたほうが精神衛生上良い。
ゲームを作るというのもそうで、これまでゲームらしきもの、というものは何度か作ったことはあるけど、これは自分がオリジナルで考えたものです、と胸をはって思えるようなものを作ったことはない。
だから作ってみようと思った。最終目標は来年末くらいまでにSteamで有償にて販売するということだ。別に一本も売れなくても良い。Steamに有料で置いてあります、ということを目指すということだ。

じゃあまず何を作るか決めるか、ということだけど、経験上、そもそもやり方が体に入ってもないもので、モデルになるものがない作品のイメージするのは無理だ。逆に何か完全に真似をするものがあればできるのだけど、今回はそういうものを作ろうとしていない。
完全に新しいもの、ではなくても良いのだけど、ゲームそのものの構造というか、システムに面白さがあるもの、たとえばPapers, Pleaseとか、Please, Don't Touch Anythingとか、The Stanley Parableみたいに、構造やシステムがゲームそのものと密接に関わるようなものが良いと思っている。特に関係ないけどスリーマッチパズルにストーリーつけましたとか、そういうものを作りたいわけではない。
そのためまずはゲームを作る、アイデアをゲームっぽいものにする、という作業を手に馴染ませなくてはならないように思う。

人によって得意なやり方というのは違うだろうけど、自分は常に手を動かすことで何かを考えたり、作っていくタイプなので、ひとまず面白いかどうかはともかくとして、それっぽいだけのものを量産していこうかと思う。

2019年9月8日日曜日

Legal Dungeon ネタバレ考察

以下、Legal Dungeonのいちばん最後までのネタバレを含みます。

***

注:エンディング14の見方は分かってないです。

蒼が犯罪に至るまでの道筋を抑えると、あまり詳細に描かれていない最後の話も一応は理解できるような気はする。始まりは二個目のホームレスの事件からで、この山本さんの事件というのは、その後の「釣り」をやるときにわざわざ山本さんを連れてきたことから、蒼にとって傷になっていることが分かる。
この「釣り」の代金は一万円で、逮捕エンドの方で山本さんが支払っていないビラの料金と同じなのは、もちろんそういうことだろうと思う。山本さんは(チャットを見る限りたぶん渋谷を経由して)蒼に行方不明になった孫を探していることや、金の相談をしていて、蒼はその代金を工面してやる代わりに釣り餌を頼んだわけで、もちろんそのせいで山本さんが殺されてしまうなんて、想像もつかなかっただろう。
エンディングで蒼が泣き崩れるのは、電話の内容で自分が頼まれた金の使いみちを理解したからであって、また、鳥居祐一を犯人に仕立てたのも、元々なんの問題にもならなかったはずの事件を特殊窃盗にせざるを得なかった(鳥居祐一は山本さんを取り押さえた張本人)ことに、何らかの憎悪があったせいもあるのかなと思う。

全体を通して、まだ良くわからないこともいくつかある。

例えば、自殺幇助の事件は、瓶が二つ転がっていたとか、二回お金を振り込んでいることが明らかに重要なポイントになりそうなのだけど(以前も足りなかった、ということで訴えられていることと関連するし)、あまり言及もなくすんなり通り過ぎてしまう。

また、出世エンディングで、原田がなんで蒼のベッドのこと知ってんねん(女の上司のベッドを知ってるって普通ありえないよね?)とか、冷蔵庫のおつまみってなんやねん、とか、……って今書くためにテキスト読み直してて気づいたけど、あれは原田が蒼を怪しんで家に侵入してベッドを確認した(ので、おつまみのことも知ってる)という話ですね、これ。
そこから行くと、署長が「冷蔵庫」って意味ありげに言ってるのは、おそらく蒼の家か車は盗聴されてて、このときの会話から蒼が関与しているのを知ったということなのだろうか。

もちろん一番大きな謎というのは、エンディング14のことで、適当にググってみた感じではそれについて明確な正解を書いている人は見つけられなかった。
作者のインタビューを読むと「すべてのエンディングは、犯人への裁定を変更することで見られる」と、わざわざエンディング数に言及したあとでこう言っているので、どれかの事件の結果を変えられるようなキーワードを入れるのではないかと思う。

とはいえ、フォーラムでは思いつく限りの名前とキーワードは入れてみた、と書いている人もいるので、単純にゲーム内に出てきている単語などではないような気もする。
また、作者上述のインタビューで、「ゲームオーバーにならないために評価を操作したあなたと、評価のために被疑者を拷問した(現実の)警官のどこが違うのか考えるべきだ」なんてことも言っているので、よりメタ的な視点で考える必要があるのかもしれない。